Геокодирование адреса-заглушки во время модульного теста RSpec - PullRequest
9 голосов
/ 13 апреля 2011

Я использую гем geocoder , чтобы добавить функциональность геокодирования в один из моих классов модели Active Record. Это прекрасно работает, но я не хочу, чтобы геокодирование срабатывало во время юнит-тестов.

Я попытался заглушить вызов геокодирования, добавив его в мой тест RSpec:

перед (: каждый) сделать
User.stub! (: Геокод) .and_return ([1,1]) конец

Однако, когда я запускаю свои тесты, кажется, что они вызывают геокодирование. Что я делаю не так?

К вашему сведению, все это работает, если я заглушки на уровне экземпляра (например, some_user.stub! Вместо User.stub!).

Ответы [ 2 ]

9 голосов
/ 13 апреля 2011

Если вы хотите использовать заглушки на уровне экземпляра, вы должны использовать другую среду моделирования, отличную от RSpec.Например, mocha (добавьте следующее к spec/spec_helper.rb):

Spec::Runner.configure do |config|
  config.mock_with :mocha
end

http://rspec.info/documentation/mocks/other_frameworks.html

Теперь вы можете использовать any_instance в своих тестах:

before(:each) do
 User.any_instance.stub(:geocode).and_return([1,1]) 
end
3 голосов
/ 08 июня 2011

это

before(:each) do 
  Address.any_instance.stubs(:geocode).returns([1,1])
end

с мокко.

...