我尝试使用 RSpec 在 Windows 上测试我的 Rails 3 应用程序。我已经编写了测试和工厂,但无法解决在命令行上运行 RSpec 时出现的问题。
这是测试文件之一: 需要“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
这是工厂。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))
我做错了什么?
我知道这是一个老问题,但万一其他人在搜索“特征未注册”时最终来到这里:
当使用依赖属性时,例如
email
如何依赖于问题中 name
工厂中的 :club
,您需要将属性括在大括号中,以便它得到延迟评估:
email {"#{name}@example.com"}
这是一个FactoryGirl错误,看来你正在使用(在spec/features/sign_in_spec.rb:11)类似的东西:
FactoryGirl.create :user, :name
只有当您注册了一个名为“工厂名称”的特征时,这才有效
user
,更多关于特征的信息这里
请注意,如果您只想覆盖已创建用户的名称,则语法为
FactoryGirl.create :user, name: 'THE NAME'
供未来读者参考:
什么不起作用 - 参数错误: 特征未注册:user_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
当一切看起来都正确时,我如何使用其中任何一个解决这个问题:
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
又一个迟来的答案。我敲了敲头,因为我忘记了我的模型是非常新的,而且我没有迁移
test
数据库。所以这个属性实际上并不存在。
即必须提前跑
rails db:migrate RAILS_ENV=test
就我而言,以上(以下?)答案都无法帮助解决
trait not registered
错误。
这次是因为装货工厂顺序不当造成的。我移动了一个带有声明的全局特征的文件,FactoryBot 开始以不正确的顺序加载它。
我是如何解决这个问题的? 将其重命名为“spec/factories/01_factory_traits”,问题就解决了。
也许有更好的方法,但它确实有效。
我遇到了类似的问题,这是由于我们为尚未加载的函数分配了属性。我们收到了特征未注册错误,结果发现这是由于当属性定义不明确时,factorybot 的搜索顺序造成的。
https://www.rubydoc.info/gems/factory_bot/5.1.1/FactoryBot/DefinitionProxy:method_missing