2014-07-15 5 views
5

Ich habe den folgenden Code ein, dass ich einen Anruf zu einer Klassenmethode zu verspotten bin mit:Minitest - pass jedes Argument zu erwarten

def test_calls_update_profile_job_for_a_lead 
    input = ContactInput.new valid_attributes 

    mock = MiniTest::Mock.new 

    use_case = CreateContact.new user, input, mock 

    mock.expect(:perform_async, nil, [user.id, 1, ::Contact]) 

    use_case.run! 

    assert mock.verify 
end 

Das Problem ist, dass ich in den spezifischen Werten zu übergeben habe -

[user.id, 1, :: Kontakt]

den Test zu machen.

Gibt es eine Möglichkeit, dass ich nicht die genauen Werte angeben muss oder zumindest einschränken, was die Argumente sind. Ich möchte nicht die genauen Argumente überprüfen, ich möchte nur sicherstellen, dass die Methode aufgerufen wurde.

+0

+1 Es scheint, dass Minitest es unmöglich macht, ohne Angabe der * genau * Werte zu erwarten. Wie kann ich in meinem Anwendungsfall den genauen Wert angeben, wenn ich eine zufällig generierte UUID erhalte? –

Antwort

4

Nach den docs:

args wird auf die erwarteten args Gleichheit (dh des '===' Operator), für weniger spezifische Erwartungen ermöglicht unter Verwendung von Fall verglichen.

Zum Beispiel

mock = MiniTest::Mock.new 
mock.expect(:perform_async, 'goodbye', [Integer, Integer, String]) 
puts mock.perform_async(1, 1, 'hello') #=>goodbye 
puts mock.perform_async(1, 1, 1) #=>MockExpectationError 
+0

Fantastisch. Vielen Dank – AJcodez