Могу ли я смоделировать объект, который находится внутри метода, который я тестирую, с помощью rspec? - PullRequest
2 голосов
/ 02 июня 2011

Я определил следующий метод:

def some_method

  x = x + 1
  y = some_other_method(x)


  x + y
end

Теперь в моей спецификации rspec я могу высмеять вызов some_other_method для моего модульного теста some_method?

1 Ответ

3 голосов
/ 02 июня 2011

Вы действительно можете смоделировать другие методы в тесте RSpec.Если два упомянутых вами метода находятся внутри класса, Foo, вы должны сделать что-то вроде этого, чтобы убедиться, что вызывается some_other_method:

subject{ Foo.new }
it "should do whatever you're testing" do
  subject.should_receive(:some_other_method).and_return(5)
  subject.some_method
end

Если вам не нужно утверждать, что этобыл вызван, просто подтвердите результаты some_method, вы можете сделать что-то вроде этого:

subject{ Foo.new }
it "should do whatever you're testing" do
  subject.stub(:some_other_method).and_return(5)
  subject.some_method.should eq(6)
end

В приведенных выше примерах предполагается, что вы используете RSpec 2. Если вы используете RSpec 1, вы 'Вам нужно будет использовать stubs вместо stub.

Если ваши методы определены вне класса, они действительно определены в классе Object, поэтому просто используйте Object вместо Foo в приведенных выше примерах.

Для получения дополнительной информации о макетах в RSpec проверьте http://relishapp.com/rspec/rspec-mocks для RSpec 2 или http://rspec.info/documentation/mocks/ для RSpec 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...