RSpec给出错误'trait not registered:name'

Roo*_*nen 20 rspec ruby-on-rails-3 factory-bot

我尝试使用RSpec在Windows上测试我的Rails 3应用程序.我已经编写了测试和工厂,但无法解决在命令行上运行RSpec时引发的问题.

以下是其中一个测试文件:require'pec_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
Run Code Online (Sandbox Code Playgroud)

这是工厂.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 "test@example.com"
  club
end
Run Code Online (Sandbox Code Playgroud)

当我尝试运行RSpec时,它会出现以下错误:

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

我究竟做错了什么?

cal*_*vin 59

我知道这是一个老问题,但是如果有人在搜索"Trait not registered"时结束了这里:

当使用依赖属性时,如何email依赖于问题name中的:club工厂,您需要将该属性包装在花括号中,以便进行延迟求值:

email {"#{name}@example.com"}
Run Code Online (Sandbox Code Playgroud)


pja*_*jam 5

这是一个FactoryGirl错误,似乎你正在使用(在spec/features/sign_in_spec.rb:11)类似于:

FactoryGirl.create :user, :name
Run Code Online (Sandbox Code Playgroud)

这只有在你为工厂注册一个名为name的特征时才有效user,更多关于这里的特征

请注意,如果您只想覆盖已创建用户的名称,则语法为

FactoryGirl.create :user, name: 'THE NAME'
Run Code Online (Sandbox Code Playgroud)