加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rack :: Test导致ActiveRecord :: Association

发布时间:2020-12-16 22:33:34 所属栏目:百科 来源:网络整理
导读:运行我的所有规格时,我有一个问题. ActiveRecord::AssociationTypeMismatch: Affiliate(#2154746360) expected,got Affiliate(#2199508660) 看来我的模型正在加载两次. 我已经分离出了Rack :: Test要定义“app”方法的问题. require 'rack/test'include Rack
运行我的所有规格时,我有一个问题.
    ActiveRecord::AssociationTypeMismatch:
       Affiliate(#2154746360) expected,got Affiliate(#2199508660)

看来我的模型正在加载两次.

我已经分离出了Rack :: Test要定义“app”方法的问题.

require 'rack/test'
include Rack::Test::Methods

# app method is needed for rack-test
def app
  Rails.application
end

如果我评论Rails.application我的机架规格不起作用,但我的其他规格都可以正常工作.在“app”方法中使用Rails.application引入了上面的错误.

如果我单独运行我的规格,一切都可行.我用Spork预装了我的环境,我认为模型首先由Spork加载,然后当我的“app”方法调用Rails.application时,它们被重新定义.

关于我如何解决这个问题的任何想法?我不知道是否有另一种方式设置我的Rails应用程序在“应用程序”方法.

解决方法

从源代码为Rails.application:
# File railties/lib/rails.rb,line 34
def application
  @@application ||= nil
end

这意味着Rails.application每次返回相同的对象.也许这是问题 – 在同一个Rails应用程序与对象冲突时运行多个测试.

Some tutorials集测试如下:

def app
  Rails::Application
end

而others这样做:

def app
  ActionController::Dispatcher.new
end

这两个都为每次调用应用程序创建新对象.

编辑:刚从注意到ActionController :: Dispatcher.new被标记为已弃用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读