如何在由 Capybara 提供支持的 rspec 功能测试中发布 json 数据

Ami*_*ani 5 rspec ruby-on-rails capybara

简短的问题

我需要在功能测试中发布 JSON,就像在我的控制器测试中一样:

post '/orders.json', params.to_json, format: :json
Run Code Online (Sandbox Code Playgroud)

但我需要在功能测试中做到这一点,并且page.driver.post只发布表单数据。如何在水豚中发布 JSON?

长解释

我有一个(非 Rails)应用程序(我们称之为行星),它将 JSON 发布到我的 Rails 应用程序(称之为星星)以创建记录,然后将用户转发到显示操作的 url。

我正在创建一个功能规范,但由于第一次交互不是 Rails 应用程序的一部分,我需要使用 JSON 来模拟它。

我一直在用这个:

page.driver.post '/orders.json', params.to_json
Run Code Online (Sandbox Code Playgroud)

但这似乎以表单形式发布,而我的星球应用程序发布 JSON。这会导致一些非常奇怪的参数问题,其中解析 JSON 为我提供了与表单数据不同的参数。

如何在水豚中发布 JSON?

Ami*_*ani -1

所以,事实证明这对水豚来说是不可能的。有关更多详细信息,请参阅Thomas Walpole的回答。

作为解决方法,我使用了httparty

require 'httparty'

RSpec.feature 'Checkouts', type: :feature do
  include HTTParty
  base_uri 'http://localhost:3000'

  private

  def checkout_with(cart)
    post orders_path(format: :json).to_s,
         body:    cart.to_json,
         headers: { 'Content-Type' => 'application/json' }
  end
end
Run Code Online (Sandbox Code Playgroud)