2015-09-28 6 views
0

я использую Shoulda камень и пытаюсь проверить некоторые частные методы:Rspec Shoulda согласовань с частными методами

it { should respond_to (instance_eval{:get_user_status})} 
    it { should respond_to (instance_eval{:send_email_notification})} 

Но тесты терпят крах, потому как эти методы являются частными. Как я могу правильно протестировать их отзывчивость с помощью помощников по назначению?

ответ

1

Чтобы проверить частный метод, вы должны позвонить, используя send. Вы можете проверить это следующим образом:

it "tests private methods" do 
    my_object = MyObject.new 
    expect(my_object.send(:get_user_status)).to eq 'some_value' 
    expect(my_object.send(:send_email_notification)).to eq 'some_other_value' 
end 
0

Вы могли использовать send испытать частные методы ... но вы действительно не должны делать это. Тесты используются для подтверждения того, что ваш объект ведет себя так, как вы ожидаете, так что, когда другой код, независимо от того, принадлежит он вам или нет, использует ваш объект, вы знаете, что произойдет. Частные методы являются внутренними для класса, который вы создаете; они не могут быть вызваны нигде, кроме вашего класса, поэтому они уже должны использоваться косвенно с помощью тестов для общедоступных методов, которые используют эти частные методы. Вы можете по существу рассматривать свой частный метод как извлечение своего общедоступного кода. Санди Мец дал отличный разговор об модульном тестировании, который я рекомендую смотреть, если вы хотите узнать больше об этом; часть, которая говорит о частных методах, - here.

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