2016-04-22 6 views
1

は私のエラーRSpecの3のRuntimeError: "`の前でアクセス宣言しましょう(:コンテキスト) `フック" ここ

Failure/Error: @queue = FactoryGirl.create(model.to_s.underscore.to_sym) 
RuntimeError: 
    let declaration `model` accessed in a `before(:context)` hook at: 
    /var/www/html/SQ-UI/spec/support/user_queue/asterisk_serialize_spec.rb:7:in `block (2 levels) in <top (required)>' 

    `let` and `subject` declarations are not intended to be called 
    in a `before(:context)` hook, as they exist to define state that 
    is reset between each example, while `before(:context)` exists to 
    define state that is shared across examples in an example group.enter code here 

であり、ここで、それは私が「

let(:model) { described_class } # the class that includes the concern 

before(:all) do 
    @queue = FactoryGirl.create(model.to_s.underscore.to_sym) 
end 

を壊すのコードですそれらを取り除き、それらを動かそうとしましたが、成功しませんでした。

答えて

0

あなたはbefore(:all)/before(:context)フックでlet変数(またはsubject)を参照することはできません。ので、あなたのケースで

RSpecの3からRSpecの2で非推奨と削除されたやって、それはあなただけでbefore(:all)ブロックにlet変数をインライン化することができようになっています。それを固定している

before(:all) do 
    @queue = FactoryGirl.create(described_class.to_s.underscore.to_sym) 
end 
+0

恐ろしいです。ありがとうございました! –

+0

これは面白いです...なぜ彼らはこれをしたのだろうか。あまりにもひどいです。なぜなら、関連性の高い文脈ではなく、すべての単一のテストのために初期化する必要があるからです。 :/ – Trejkaz

+0

そして今私はさらに奇妙なことが起こっていることを知っています。たとえあなたが 'before(:context) 'からそれらを呼び出せなくても、rspecは二番目の例の間にブロックを再び呼び出すのではなく、 RSpecは本当に混乱しています... – Trejkaz

関連する問題