我使用FactoryGirl时遇到此问题。
每次运行测试时,都会出现错误:Array的未定义方法`to_i'
我无法看到它试图转换为整数的位置。我最好的猜测是它试图将客户端记录保存为数字,而不是仅保存记录的ID。我试过搜索文档,看看我是否错误地设置了工厂。
我已经运行了rake db:test:prepare
,希望是这样。
你能看到出了什么问题吗?
规格/ factories.rb
FactoryGirl.define do
factory :client do
name "Example"
email "email@example.com"
end
factory :book do
title "Book Title"
client_id {[FactoryGirl.create(:client)]}
end
end
规格/视图/书籍/ index.html.erb_spec.rb
require 'spec_helper'
describe "books/index" do
before do
FactoryGirl.create(:book)
end
it "renders a list of books" do
render
# Run the generator again with the --webrat flag if you want to use webrat matchers
assert_select "tr>td", :text => "Title".to_s, :count => 2
assert_select "tr>td", :text => 1.to_s, :count => 2
end
end
测试输出
1) books/index renders a list of books
Failure/Error: FactoryGirl.create(:book)
NoMethodError:
undefined method `to_i' for #<Array:0x########>
# ./spec/views/books/index.html.erb_spec.rb:5:in `(root)'
答案 0 :(得分:1)
你在定义工厂时犯了一个错误。
不要在定义中调用FactoryGirl.create...
。
假设书中有很多客户(虽然这很奇怪),你可以在客户端内提到书。喜欢这个
FactoryGirl.define do
factory :client do
name "Example"
email "email@example.com"
book # Revised here. book refers to the symbol :book
end
factory :book do
title "Book Title"
end
end
这就是全部。你测试应该能够过去。
P.S关于模型关联的附注:
在您的设置中,一个客户只能拥有一本书!通过这样的销售,企业主不能很快致富。一个合适的逻辑应该是:
客户可以有很多订单
订单可以包含多个商品
一个项目只有一本书(id),但可能有很多部分。
但那是另一个故事。