【问题标题】:RSpec Testing JSON API: Problems setting header variablesRSpec 测试 JSON API:设置标头变量的问题
【发布时间】:2014-04-30 03:35:05
【问题描述】:

我正在尝试按照 codeschool 课程“Surviving APIs with Rails”作为指南创建一个 API。 这是我的控制器索引:

def index
  respond_to do |format|
    format.json { render json: Project.all, status: 200 }
    format.all { head 406 }
  end
end

当我尝试像这样使用 rspec 测试控制器时(如课程中所示):

 get :index, {}, { 'Accept' => Mime::JSON }
 expect(response.status).to eq(200)

请求未设置为 JSON,而是设置为 html。 (并且测试失败:预期 200 得到 406) 但是,如果我尝试这样做:

  request.accept = Mime::JSON.to_s
  get :index, {}, {}
  expect(response.status).to eq(200)

请求接受头设置为“application/json”,测试通过。

所以我确实有一个解决方法,但我认为我可以在使用 get method 时设置不同的标题。我什至尝试了 cmets 所说的 here。我错过了什么 'Accept' => Mime::JSON 不起作用?

谢谢

【问题讨论】:

    标签: json ruby-on-rails-4 rspec


    【解决方案1】:

    好的,我从 codeschool 的支持人员那里得到了一些帮助:

    看起来 get 方法在控制器测试/规范上的工作方式与它们在请求规范/集成测试上的工作方式不同(这是我们在课程中使用的)。

    我相信您的示例是控制器规格,可能正在使用这个 - https://github.com/rails/rails/blob/master/actionpack/lib/action_co... 从阅读文档来看,似乎没有一种方法可以在该方法上传递标头值,因此您的替代方案可能是设置标题的唯一方法。另一方面,集成测试使用另一种获取方法https://github.com/rails/rails/blob/master/actionpack/lib/action_di...,这是我们在课程中使用的。

    感谢代码学校。

    【讨论】:

    • 两个链接都坏了。
    • 是的,这已经没有多大帮助了。而且我找不到他们支持的电子邮件来修复它。
    猜你喜欢
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    相关资源
    最近更新 更多