2014-10-11 52 views
2

我试图定义一个测试环境,以编程方式向我的Grape API发出请求。为葡萄API定义测试有什么方法?

我的主要API文件到/app/api/services/v1.rb和我创建了一个名为请求到规范路径与此内容进行测试文件夹:

describe Services::V1 do 
    describe "GET /v1/users/:id" do 
    it "returns a user by id" do 
     user = User.create! 
     get "/api/users/#{user.id}" 
     expect(response.body).to eq user.to_json 
    end 
    end 
end 

的API对用户资源定义的路径,但我有一个错误这意味着Servicesnamespace是

我添加config.include的RSpec ::导轨:: RequestExampleGroup,键入“未初始化的常量服务(NameError)”:要求,file_path:/ spec/api /进入spec_helper,但我认为我误解了与之相关的Grape doc。

“您可能希望API代码进入应用程序/ API - 您可以通过添加在规格以下/ spec_helper.rb下规范匹配 布局

RSpec.configure做|配置|。 config.include 的RSpec的Rails :: :: RequestExampleGroup,类型:请求,FILE_PATH: /规格/ API /结束”

任何帮助,使事情的工作表示赞赏。我是这个技术设置的新手。

回答

1

您需要测试资源而不是api版本。

describe "ExampleApi::V1::Regions" do 

    describe "GET /api/v1/regions/{id}" do 
    context "without data" do 
     it "should return a status code 404" do 
     get "/api/v1/regions/100000000", nil, { 'Authorization' => "Bearer #{token.token}"} 
     expect(response.status).to eq 404 
     end 

     it "should return an empty array" do 
     get "/api/v1/regions/100000000", nil, { 'Authorization' => "Bearer #{token.token}"} 
     expect(json['error']['code']).to eq(404) 
     end 
    end 

    context "with data" do 
     it 'returns a status code 200' do 
     get "/api/v1/regions", nil, { 'Authorization' => "Bearer #{token.token}"} 
     expect(response.status).to eq 200 
     end 

     it 'returns a region' do 
     region1 = Fabricate(:region) 
     get "/api/v1/regions/#{region1.id}", nil, { 'Authorization' => "Bearer #{token.token}"} 
     expect(json["id"]).to eq(region1.id) 
     end 
    end 
    end 

end 

在此示例中,授权标头用于您使用身份验证(在此情况下为Oauth2)的情况。如果您在rails_helper添加config.include RSpec::Rails::RequestExampleGroup, type: :request, file_path: /spec/api/

# Just if the tests are in spec/api folder 
config.include RSpec::Rails::RequestExampleGroup, type: :request, file_path: /spec\/api/ 
0
  1. 还有一个帮手或JSON,您可以创建支持文件夹中的文件:rails_helper.rb附加

    module Requests 
        module JsonHelpers 
        def json 
         @json ||= JSON.parse(response.body) 
        end 
        end 
    end 
    

    .rb,这意味着你应该把你的API规范放在/spec/api/而不是/spec/requests/

  2. 你应该在你/spec/api/services/v1/regious_spec.rb

添加 require 'rails_helper'