web-dev-qa-db-ja.com

RSpecは「trait not registered:name」というエラーを出します

RSpecを使用してWindowsでRails 3アプリケーションをテストしました。テストとファクトリーを作成しましたが、コマンドラインでRSpecを実行したときに発生する問題を解決できません。

テストファイルの1つを以下に示します。'spec_helper 'が必要です

describe "SignIns" do
  it "can sign in" do
    user = FactoryGirl.create(:user)
    visit new_user_session_path
    fill_in "login", with: user.username
    fill_in "password", with: user.password
    click_on "sign in"
    current_user.username.should == user.username
  end
end

そして、factories.rbは次のとおりです。

factory :layout do
  name "layout1"
end

factory :club do
  sequence(:name) { |i| "Club #{i}" }
  contact_name "John Doe"
  phone "+358401231234"
  email "#{name}@example.com"
  association :layout
end

factory :user do
  sequence(:username) { |i| "user#{i}" }
  password 'password'
  email "[email protected]"
  club
end

RSpecを実行しようとすると、次のエラーが発生します。

trait not registered: name
  #C: in 'object'
  #.spec/features/sign_in_spec.rb:11:in 'block (2 levels) in (top(required))

何が悪いのですか?

20
Roope Hakulinen

私はこれが古い質問であることを知っていますが、「トレイトが登録されていません」を検索したときに他の誰かがここに行く場合に備えて:

emailが質問の:clubファクトリのnameにどのように依存するかなどの依存属性を使用する場合、遅延評価されるように属性を中括弧で囲む必要があります。

email {"#{name}@example.com"}
58
calvin

これはFactoryGirlエラーであり、(spec/features/sign_in_spec.rb:11で)次のように使用しているようです:

FactoryGirl.create :user, :name

これは、ファクトリuserの名前と呼ばれる特性を登録した場合にのみ機能します。特性の詳細 here

作成したユーザーの名前をオーバーライドするだけの場合、構文は次のとおりです。

FactoryGirl.create :user, name: 'THE NAME'
5
pjam