2015-02-09 5 views
5

मैं हर बार FactoryGirl.build(:user) को उपयोगकर्ता बनाना चाहता हूं और इसलिए मैंने इन पंक्तियों को जोड़ा:'method_missing': 'build` एक उदाहरण समूह (उदाहरण के लिए' वर्णन 'या' संदर्भ 'ब्लॉक) पर उपलब्ध नहीं है

RSpec.configure do |config| 
    config.include FactoryGirl::Syntax::Methods 
end 

spec_helper.rb पर। लेकिन यह निम्न त्रुटि बनाता है:

`method_missing': `build` 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`, `let`, etc). (RSpec::Core::ExampleGroup::WrongScopeError) 

फिर मैंने सभी संदर्भ/ब्लॉक ब्लॉक को हटा दिया, लेकिन इससे कुछ भी नहीं बदला। क्या आप में से कोई भी इस के साथ एक ही समस्या है और मैं इसे कैसे ठीक कर सकता हूं?

वर्तमान में मेरे परीक्षण इसलिए की तरह लग रहे:

require 'rails_helper' 

RSpec.describe User, type: :model do 
    user = build(:user) 
    project = build(:project) 

    it "is valid with a firstname, lastname, email and password" do 
    expect(user).to be_valid 
    end 

    it "is invalid without a firstname" do 
    user = build(:user, name: nil) 

    expect(user.valid?).to be_falsey 
    expect(user.errors[:name].size).to eq(1) 
    end 

    it "is invalid without a lastname" do 
    user = build(:user, surname: nil) 

    expect(user.valid?).to be_falsey 
    expect(user.errors[:surname].size).to eq(1) 
    end 

    it "destroys dependent projects" do 
    user = User.create!(name: 'john', surname: 'doe', email: '[email protected]', password: 'password', password_confirmation: 'password') 
    user.projects << project 

    expect{user.destroy}.to change {Project.count}.by(-1) 
    end 

end 

उत्तर

3

बजाय:

user = build(:user) 
project = build(:project) 

है:

let(:user) { build(:user) } 
let(:project) { build(:project) } 

सामान्य तौर पर यह एक अच्छा विचार का उपयोग करने के बाहरी चर निर्धारित करने नहीं है उन्हें एक परीक्षण में, क्योंकि इससे आपके परीक्षण ऑर्डर-निर्भर और डीबग करने में बेहद मुश्किल हो सकते हैं। हमेशा let वाक्यविन्यास का उपयोग करें, इसलिए मूल्यों को प्रत्येक परीक्षण के लिए पुन: प्रारंभ किया जाता है।

संबंधित मुद्दे