2014-09-05 1 views
1

Т.е.Есть ли способ установить ожидания RSpec для получения вызова метода в качестве аргумента?

ожидать (my_class) .чтобы получить (: method_b) .with (: calling_method_b_here)

(это не возвращаемое значение, я хочу, но специально, чтобы проверить, что method_b называется в таким образом)

?

+0

Нет. Я не знаю. Но вы можете показать нам свой код, чтобы мы могли предложить вас там, чтобы изменить метод, который вы написали, предложив некоторые изменения и упростите ваш модульный тест. –

+0

@ArupRakshit не знает, имеет ли это значение для вас, но это очень возможно. См. Мой ответ ниже для тестирования такой вещи. – engineersmnky

+0

@engin это не имеет смысла тестировать вызов метода в списке аргументов. –

ответ

1

Это должно работать для вас, если я правильно понимаю:

it "should call #method_b when I call #method_that_calls_b" do 
    expect(my_class).to receive(:method_b).with(anything) #anything means I don't care explictly what is sent in just that it was called 
    my_class.method_that_calls_b 
end 

Это будет проверить, что на самом деле method_that_calls_b называют method_b с любыми аргументами. Если вы знаете, какие аргументы должны получать, то замените что-нибудь тем, с чем вы ожидаете, с которым он будет вызван. например

it "should call #method_b with 'hello'" do 
    expect(my_class).to receive(:method_b).with('hello') 
    my_class.method_b('goodbye') #this will fail 
    my_class.method_b('hello') #this will pass without the above line 
end 
+0

Написание тестового кода противоречиво :-) Я не Кент Бек ... Хехех .. Но я бы не написал тест, как попросил ОП ... Вот почему я попросил его показать код. –

+0

+1 хотя я думаю, что '.with (anything)' бессмысленно, я просто оставил бы его. –

+0

@ p11y Я согласен, но он специально просил метод 'with', поэтому я хотел показать его. – engineersmnky

 Смежные вопросы

  • Нет связанных вопросов^_^