2010-04-23 2 views
4

В моих спецификациях моего контроллера я выполняю проверку? для некоторых тестов маршрутизации, (на основе Ryan Bates nifty_scaffold) следующим образом: -Есть ли способ отменить Mocha stubbing any_instance?

it "create action should render new template when model is invalid" do 
    Company.any_instance.stubs(:valid?).returns(false) 
    post :create 
    response.should render_template(:new) 
end 

Это хорошо, когда я проверить контроллеры в изоляции. У меня также есть следующее в моей спецификации модели.

it "is valid with valid attributes" do 
    @company.should be_valid 
end 

Снова это прекрасно работает при испытании изолированно. Проблема возникает, если я запускаю спецификацию для обеих моделей и контроллеров. Тест модели всегда терпит неудачу как действительный? метод был заглушен. Есть ли способ, чтобы я удалил stubbing any_instance, когда тест контроллера снесен.

У меня возникла проблема, запустив тесты в обратной алфавитной последовательности, чтобы гарантировать, что тесты модели выполняются перед контроллерами, но мне действительно не нравятся мои тесты, зависящие от последовательности.

ответ

4

Вам необходимо вручную настроить RSpec.

Rspec.configure do |config| 
    ... 

    # == Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 
    # config.mock_with :rspec 
end 

Также помните, что Rspec предоставляет свои собственные методы для издевательства над объектом. Используйте RSpec API или вы не сможете воспользоваться библиотечной абстракцией. http://rspec.info/documentation/mocks/message_expectations.html

+0

Хотя решение правильное, объяснение не является. Mocha не обнаруживает RSpec, но когда конфигурация RSpec установлена, как описано, RSpec вызывает Mocha в соответствующих точках. –

+0

Обновлен комментарий. Спасибо @floehopper –

1

ли ваш spec_helper содержит

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

С этой RSpec должны снести издевается между тестами.

3

У меня та же проблема, но не используя Rspec но нормальный Test::Unit, на самом деле ActionController::TestCase.

Определенные ожидания сохраняются среди тестов.

Есть ли какие-либо подсказки, как я могу сбросить свои ожидания между тестами?

  • Ruby: 1.9.2
  • Rails: 3.0.3
  • Мокко: 0.9.10

Обновлено: Я решил эту проблему с помощью метода unstub Мокко: http://mocha.rubyforge.org/classes/Mocha/ObjectMethods.html#M000009

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