Ruby on rails 3 RSpec给出错误';特征未注册:名称';

Ruby on rails 3 RSpec给出错误';特征未注册:名称';,ruby-on-rails-3,rspec,factory-bot,Ruby On Rails 3,Rspec,Factory Bot,我试着用RSpec在Windows上测试我的Rails 3应用程序。我已经编写了测试和工厂,但无法解决在命令行上运行RSpec时出现的问题 以下是其中一个测试文件: 需要“spec\u helper” describe "SignIns" do it "can sign in" do user = FactoryGirl.create(:user) visit new_user_session_path fill_in "login", with: user.user

我试着用RSpec在Windows上测试我的Rails 3应用程序。我已经编写了测试和工厂,但无法解决在命令行上运行RSpec时出现的问题

以下是其中一个测试文件: 需要“spec\u 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
下面是工厂。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
当我尝试运行RSpec时,它会出现以下错误:

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

我做错了什么?

这是一个FactoryGirl错误,而且您似乎正在使用(在规范中的spec/features/sign\u.rb:11)类似于:

FactoryGirl.create :user, :name
这仅在您为工厂
用户注册了名为name的特征时有效,更多关于特征的信息

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

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

我知道这是一个老问题,但如果其他人在搜索“Trait not registed”时出现在这里:

在问题的
:club
工厂中使用依赖属性(如
电子邮件
如何依赖
名称
)时,需要将该属性用大括号括起来,以便对其进行评估:

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

供未来读者参考:

什么不起作用- 参数错误: 未注册特征:用户id

    FactoryBot.define do
      factory :startup do
        user_id
        name { FFaker::Lorem.word }
        website { FFaker::Internet.uri(host: 'example.com') }
        founded_at { "01.01.2000" }
      end
    end
当一切看起来都正常时,我是如何使用这两种方法解决这个问题的:

  • 将空大括号放在用户id后面
  • 使用帮助程序将用户id移动到其他块下方:

  • 我读过关于特质的文章,但第11行是我在上面粘贴的调用。所以我还是看不到错误?为我的项目编写工厂是相当困难的,因为每个模型都有默认范围来过滤正确的俱乐部,所以我认为问题出在关系上。
    俱乐部
    工厂需要一个
    :name
    属性——它有一个吗?是的,它有name字段,布局也有。
        FactoryBot.define do
          factory :startup do
            user_id {}
            name { FFaker::Lorem.word }
            website { FFaker::Internet.uri(host: 'example.com') }
            founded_at { "01.01.2000" }
          end
        end
    
        FactoryBot.define do
          factory :startup do
            name { FFaker::Lorem.word }
            website { FFaker::Internet.uri(host: 'example.com') }
            founded_at { "01.01.2000" }
    
            user_id
          end
        end