2015-02-09 12 views
5

Desidero rimuovere lo FactoryGirl.build(:user) ogni volta che voglio creare un utente e quindi ho aggiunto queste righe:`method_missing ':` build` non è disponibile su un gruppo di esempio (ad esempio un blocco `describe` o` context`)

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

a spec_helper.rb. Ma questo crea il seguente errore:

`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) 

Quindi ho rimosso tutti i blocchi contesto/descrivi, ma ciò non ha cambiato nulla. Qualcuno di voi ha avuto lo stesso problema con questo e come posso ripararlo?

Attualmente le mie prove sembrano così:

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 

risposta

3

Invece:

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

Do:

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

In generale non è una buona idea per definire variabili esterne da usare in un test, in quanto ciò potrebbe rendere i test dipendenti dall'ordine e estremamente difficili da eseguire il debug. Utilizzare sempre la sintassi let, quindi i valori vengono reinizializzati per ogni test.

Problemi correlati