Zar*_*doz 30 ruby ruby-on-rails
运行规范时出现一个非常奇怪的错误:
Failure/Error: entity = Factory.create(:entity, :name => "Test Entity", :creator => user)
ActiveRecord::AssociationTypeMismatch:
::User(#97318850) expected, got User(#92770800)
Run Code Online (Sandbox Code Playgroud)
这是导致上述错误的代码.工厂是factory_girl工厂.
user = Factory(:user, :username => "kai", :email => "xxx@yyy.com", :password => "testing")
entity = Factory.create(:entity, :name => "Test Entity", :creator => user)
Run Code Online (Sandbox Code Playgroud)
当我使用时,:creator => User.first
一切都按预期工作.我打印出来User.first
和user
,但看不出有什么差别.
有什么建议到底有什么不对吗?
运行这个简单的请求规范时,我也遇到了这个错误
describe "Entities" do
it "should succeed" do
entity = Factory.create(:entity, :name => "Test Entity 1")
visit root_path
end
it "should also succeed" do
entity = Factory.create(:entity, :name => "Test Entity 2")
property = Factory.create(:property, :entity => entity)
end
end
Run Code Online (Sandbox Code Playgroud)
这次我得到了
Failure/Error: property = Factory.create(:property, :entity => entity)
ActiveRecord::AssociationTypeMismatch:
Entity(#103620190) expected, got Entity(#96047070)
Run Code Online (Sandbox Code Playgroud)
当我删除visit root_path
一切正常(也是在自己运行每个规范时).这似乎是请求规范的问题.其他规格(型号,控制器)似乎运行良好.我使用Capybara 1.0.0.beta1和RSpec 2.5.
这个数字背后的数字是什么意思?
Mat*_*chu 55
这是在加载了两个不同版本的模型时发生的错误.我曾经在较旧版本的Rails 3中使用它,因为开发环境的模型重新加载器略微出现了问题.类名后面的数字指的是该类的不同版本.
理所当然,这种错误可能会在开发模式中出现,但它不应该在测试模式下,因为默认情况下会缓存类.请参阅该config/environments/test.rb
文件以确保cache_classes
设置为true.
另请检查您使用的是最新版本的Rails 3.0.7.这可能是一个已修复的错误.当我们在这时,检查你是否在factory_girl 1.3.3.当我完全正确地使用API时,我认为你正在做的事情,剩下的唯一可能性是某些东西配置错误或者是别人的代码中的错误.
而不是禁用在开发过程中可能会加重的类缓存,如果在使用之前让对象保持新鲜,问题可能会消失.在我的情况下,我正在从一个协会加载一个对象:
desired_object = foo.bar
Run Code Online (Sandbox Code Playgroud)
找到该项目而不是删除问题,并且不需要缓存类.
desired_object = Bar.find(foo.bar_id)
Run Code Online (Sandbox Code Playgroud)
我知道这不太理想,但也许这会帮助别人找出它为什么会发生的事情.
归档时间: |
|
查看次数: |
10471 次 |
最近记录: |