2016-04-22 15 views
1

Hier ist mein FehlerRSpec 3 Runtime: "Deklaration in einem` zugegriffen lassen vor (: context) `Haken"

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 

und hier ist der Code, wo es

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

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

brechen Ich Ich habe versucht, sie zu entfernen und sie herumzubewegen, aber keinen Erfolg.

Antwort

0

Sie können nicht auf eine let Variable (oder subject) in einem before(:all)/before(:context) Hook verweisen. Doing so veraltet wurde in RSpec 2 und entfernt von RSpec 3.

In Ihrem Fall sieht es aus wie Sie gerade die let Variable in die before(:all) Block inline kann:

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

toll, dass es behoben. Vielen Dank! –

+0

Das ist interessant ... Ich frage mich, warum sie das gemacht haben. Schade, dass es weg ist, denn jetzt muss ich das Ding für jeden einzelnen Test initialisieren, anstatt nur die Kontexte, in denen es relevant war. :/ – Trejkaz

+0

Und jetzt finde ich noch merkwürdigere Scheiße - obwohl man sie nicht mehr von 'vor (: Kontext)' aufrufen kann, hält rspec scheinbar den Wert über Beispiele und ruft den Block im zweiten Beispiel nicht erneut auf. RSpec wird wirklich verwirrend ... – Trejkaz