Rails 为 json api 请求返回不正确的 MIME 类型(仅在测试中)

Posted

技术标签:

【中文标题】Rails 为 json api 请求返回不正确的 MIME 类型(仅在测试中)【英文标题】:Rails returns incorrect MIME type for json api request (only in test) 【发布时间】:2017-08-14 13:14:11 【问题描述】:

在我的应用程序中,我动态呈现外部小部件请求的 javascript 文件。在开发环境中一切正常,但是当我测试时,出现错误:

Refused to execute script from 'http://localhost:3000/widget_init.js' because its MIME type ('text/html') is not executable, and strict MIME type checking is enabled.

为什么只出现在测试环境中,如何手动设置MIME type 'text/javascript?

路线:

  get 'widget_init', to: 'widget/root#init'

控制器:

def init
  respond_to do |format|
    format.html

    format.js  render 'init' 
  end
end

UPD:我的测试是否对您有帮助:

scenario 'opens widget if webpage id and token are valid', js: true do
  webpage.url = 'http://localhost:3000/test_widget/with_script'
  webpage.save
  webpage.reload

  visit workspace_webpage_path(webpage)
  find('#open_webpage_button').click
  #here should open a widget
  expect(page).to have_selector('#follower_widget__script')
  expect(page).to have_selector('#follower_widget__root')
end

【问题讨论】:

手动添加 mime 类型没有帮助:format.js render 'init', mime_type: Mime::Type.lookup("text/javascript") 你可以展示你的测试吗? 嗨@kunashir!我更新了描述。 主要的谜团是只有在我运行 rspec 测试时才会出现此错误消息。 【参考方案1】:

我发现问题出在 Chrome 中,它打开了一个包含不正确信息的新标签(例如,虽然我之前在同一个测试中登录过,但用户没有登录)。

【讨论】:

以上是关于Rails 为 json api 请求返回不正确的 MIME 类型(仅在测试中)的主要内容,如果未能解决你的问题,请参考以下文章

Rails:将 API 请求限制为 JSON 格式

Rails 5.2 API - 在JSON中返回枚举值

Rails Set-Cookie on json API 响应

Rails RestKit POST 请求 json 的根类丢失

Rails 3:在 Rails 中使用 JSON 响应 REST-ful 操作的正确方法是啥?

Rails JSON API 的简单令牌认证注销