2015-05-26 4 views
2

У меня есть некоторые тесты RSpec, где я переменные Выполняется инициализация let:Rspec: пусть не работает

describe 'methods' do 

    let(:order) { Order.new } 
    let(:event_1) { FactoryGirl.create(:event) } 
    let(:event_2) { FactoryGirl.create(:event) } 

    context 'should checks if any event is paid' do 
     order.events << event_1 
     order.events << event_2 
     order.events_paid?.should == true 
    end 

    context 'should write aasm state' do 
     order.aasm_write_state('new') 
     order.state.CanonicalName.should == 'new' 
    end 

    end 

Но я получаю сообщение об ошибке 'method_missing': 'order' is not available on an example group (e.g. a 'describe' or 'context' block). It is only available from within individual examples (e.g. 'it' blocks) or from constructs that run in the scope of an example (e.g. 'before', 'le', etc). (RSpec::Core::ExampleGroup::WrongScopeError)

Почему let инициализация не работает?

ответ

10

Я вижу две ошибки: (!)

  • вас нету завернутые тест внутри it блока

  • вы пытаетесь связать события order но order не сохраняется


Sidenote, the conv Тион теперь использовать следующий синтаксис:

expect(order.events_paid?).to be true 
+0

Спасибо за совет, я изменил имя переменной 'order', но я все равно получаю ту же ошибку –

+0

ах, только что понял, в чем проблема ... проверить отредактированный ответ – apneadiving

+0

это квинтэссенсивный ответ stackoverflow .." несколько вопросов не соответствуют вашему вопросу, и о, как изменил api, так что обновите свой код « – austinheiman

2

TL; DR: изменение context к it и он будет работать.


Проблема здесь состоит в том, что context определяет примерную группу, не пример. Примеры групп и примеров принципиально разные; группа примеров - это класс, который используется для группировки примеров с общим кодом установки, а пример выполняется как экземпляр этого класса. Когда вы используете let, вы определяете метод, доступный из примеров, определенных в той же группе примеров. it - основной метод определения примеров.

См. note on scope в rspec-core README для получения дополнительной информации.

На боковой ноте я написал сообщение об ошибке, которое вы пытаетесь объяснить, но явно не достигает этой цели. Что вы считаете непонятным в сообщении об ошибке? Как мы можем сделать это лучше, чтобы другие пользователи не пытались преодолеть это?

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