我有模型规格、控制器规格和请求规格。当我运行时:
rspec spec
首先运行模型规范,然后请求,然后在运行控制器规范时,第一个控制器的规范正常,但下一个失败。但是当我只运行控制器规范时,它们都通过了。我使用的是 rails 3.0.9、ruby 1.8、factory_girl 2.2.0。我有
config.cache_classes = true
在 test.rb 中,我无法更改 ruby 或 factory_girl 的版本。有人能帮我吗?
更新:
这是错误:
96) UsersController reset_password: as non-master_admin: does not reset a user's password
Failure/Error: let!(:user) { Factory(:admin_user) }
ActiveRecord::AssociationTypeMismatch:
AdminUser(#-630697398) expected, got MerchantUser(#-629918188)
# ./app/models/activity.rb:33:in `log'
# ./config/initializers/add_activity_logging.rb:8:in `_callback_after_759'
# ./spec/controllers/users_controller_spec.rb:8
在规范/控制器/users_controller_spec.rb:8 中:
let!(:user) { Factory(:admin_user) }
在活动.rb:33 中:
create(:user => user, :title => title, :changeable_id => changeable.id,
:changeable_type => changeable.class.to_s, :data => attributes)
还有:
belongs_to :user, :class_name => 'AdminUser'
在 AdminUser 类中没有 has_many 活动,但是当我尝试添加它时,我猜我无法正确添加它。谢谢您的帮助
更新:AdminUser 和 MerchantUser 是 User 的后代
POSIBLE FIX 给出错误的行实际上是:
admin_user = Factory(:tech_admin)
我将其替换为:
admin_user = FactoryGirl.build_stubbed(:tech_admin)
这样文件activity.rb就没有到达
最终修复 显然问题出在工厂(:经销商)上。我用 FactoryGirl.create(:reseller) 替换了它,一切正常。虽然现在我想知道并搜索这两种用途之间的区别是什么