2014-10-20 2 views
0

У меня есть ряд вспомогательных классов, хранящихся в моем каталоге spec/support, которые я повторно использую в нескольких тестах. Например, foo_helper.rbNoMethodError при использовании заглушки в классе-помощнике в RSpec 3 - но не RSpec 2?

class FooHelper 
    def self.stub_thing 
    Foo.any_instance.stub(:thing) 
    Foo.any_instance.stub(:thing=) 
    end 
end 

Foo используется в ряде тестов, так что я просто require ../spec/support/foo_helper.rb в каждой спецификации я хотел, чтобы иметь возможность использовать FooHelper.stub_thing. Это все прекрасно работали в RSpec 2.x

После модернизированной к RSpec 3.1, я вижу следующее предупреждение: амортизационные

Using `any_instance` from rspec-mocks' old `:should` syntax without explicitly enabling the syntax is deprecated. Use the new `:expect` syntax or explicitly enable `:should` instead. Called from app/spec/support/foo_helper.rb:4:in `stub_thing'. 

Таким образом, добавив rspec-actvemodel-mocks к моему Gemfile:

gem 'rspec-rails', '~> 3.1' 
group :development, :test do 
    gem 'rspec-activemodel-mocks', '~> 1.0' 
end 

И следующий the documentation, я изменил мой код:

class FooHelper 
    def self.stub_thing 
    allow_any_instance_of(Foo).to receive(:thing) 
    allow_any_instance_of(Foo).to receive(:thing=) 
    end 
end 

Whi ч, затем вызывает мои тесты на неудачу со следующей ошибкой:

Failure/Error: FooHelper.stub_thing 
NoMethodError: 
    undefined method `allow_any_instance_of' for FooHelper:Class 
# ./spec/support/foo_helper.rb:4:in `stub_amount' 
# ./spec/models/parent_model.rb:33:in `block (2 levels) in <top (required)>' 

Как allow_any_instance_of не может быть определена, когда any_instance и stub являются ?!

ответ

0

allow_any_instance_of включен только в том случае, если включен синтаксис expect, за http://www.rubydoc.info/github/rspec/rspec-mocks/RSpec/Mocks/ExampleMethods:allow_any_instance_of. Предположительно, вы настроили RSpec работать только с более старым синтаксисом should.

+0

Спасибо за помощь, но нет я явно не настроил ее использовать синтаксис 'should' - я не думаю!) Я использую vanilla' spec_helper.rb' и 'rails_helper.rb', сгенерированные Выполняется запуск rspec rspec: install' ... – rwb

0

Я просто столкнулся с этой проблемой. Вы случайно позвоните ему из блока before :all? По-видимому, это недопустимо, потому что это сработало после переезда на before :each.

Надеюсь, что это поможет!

1

Я столкнулся с этим и после обновления RSpec в одном из наших приложений. Для всех, кто работает в нем и кто явно не выбрал синтаксис should, просто добавьте extend RSpec::Mocks::ExampleMethods в начало класса или модуля, в котором вы пытаетесь использовать эти методы.