Codechool使用Rails生存Apis - 测试标头版本控制的路由

时间:2014-04-11 05:09:20

标签: ruby-on-rails ruby unit-testing rspec

由于某些原因,这个挑战感觉完全被淹没了。以下是5.9的首发问题:

  

新的要求已经出现,我们需要更改我们的API以支持   通过自定义Mime类型进行版本控制。这个新的Mime Type将会发生   被称为Apocalypse,将从特定的请求标题中读取。   让我们从编写一些集成测试开始。

任务1

  

设置用于版本控制的正确请求标头,其值为   我们新的自定义媒体类型的应用程序/ vnd.zombies.v1 + json。

任务2

  

断言响应中的Content-Type设置为JSON。

任务3

  

现在解析响应主体并断言有消息   属性设置为"这是第一版"。检查test / test_helper.rb   辅助选项卡上的文件,用于帮助保存一些辅助方法   时间。

以下是设置test/test_helper.rb

ENV['RAILS_ENV'] = 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'

class ActiveSupport::TestCase
  ActiveRecord::Migration.check_pending!
  fixtures :all

  def json(body)
    JSON.parse(body, symbolize_names: true)
  end
end

这是我目前的答案:

class ListingZombiesTest < ActionDispatch::IntegrationTest
  test 'show zombie from API version 1' do
    get '/zombies/1',{},{'Accept' => 'application/vnd.zombies.v1+json' }
    assert_equal 200, response.status
    assert_equal Mime::JSON, response.content_type
    assert_equal "This is version one", json(response.body)

  end
end

我收到错误:

Did not parse the response body

思想?

1 个答案:

答案 0 :(得分:0)

最后这个工作了!

class ListingZombiesTest < ActionDispatch::IntegrationTest
  test 'show zombie from API version 1' do
    get '/zombies/1',{},{'Accept' => 'application/vnd.zombies.v1+json' }
    assert_equal 200, response.status
    assert_equal Mime::JSON, response.content_type
    message = json(response.body)
        assert_equal "This is version one", message['message']
  end
end