我正在使用rspec_api_documentation在Rails 4中构建API,并且给我留下了非常深刻的印象。选择使用DoorKeeper来保护我的端点,我已经成功地从控制台测试了这一切,并使其正常工作。
现在我遇到困难的是如何规范它,并存根令牌。
DoorKeeper的文档建议使用以下内容:
describe Api::V1::ProfilesController do
describe 'GET #index' do
let(:token) { stub :accessible? => true }
before do
controller.stub(:doorkeeper_token) { token }
end
it 'responds with 200' do
get :index, :format => :json
response.status.should eq(200)
end
end
end
但是,我已根据rspec_api_documentation编写了验收测试。这是我写的projects_spec.rb
:
require 'spec_helper'
require 'rspec_api_documentation/dsl'
resource "Projects" do
header "Accept", "application/json"
header "Content-Type", "application/json"
let(:token) { stub :accessible? => true }
before do
controller.stub(:doorkeeper_token) { token }
end
get "/api/v1/group_runs" do
parameter :page, "Current page of projects"
example_request "Getting a list of projects" do
status.should == 200
end
end
end
当我运行测试时,我得到以下内容:
undefined local variable or method `controller' for #<RSpec::Core
我怀疑这是因为它不是明确的控制器规范,但正如我所说,我宁愿坚持使用这种测试我的API的rspec_api_documentation方式。
当然有人不得不这样做?还有另一种方法可以存根令牌吗?
提前致谢。
答案 0 :(得分:2)
我不建议在rspec_api_documentation验收测试中删除DoorKeeper。 RAD的一个好处是可以看到它生成的示例中的所有标题。如果您正在删除OAuth2,那么阅读文档的人在尝试创建客户端时将看不到任何OAuth2标头。
我也不确定这样做是否可行。 RAD与Capybara功能测试非常相似,快速search使得它看起来很难。
RAD有一个OAuth2MacClient
您可以使用here。
require 'spec_helper'
resource "Projects" do
let(:client) { RspecApiDocumentation::OAuth2MACClient.new(self) }
get "/api/v1/group_runs" do
example_request "Getting a list of projects" do
status.should == 200
end
end
end
答案 1 :(得分:2)
我遇到了同样的问题,我手动创建了带有指定令牌的访问令牌。通过这样做,我可以在Authorization标头中使用我定义的标记:
resource "Projects" do
let(:oauth_app) {
Doorkeeper::Application.create!(
name: "My Application",
redirect_uri: "urn:ietf:wg:oauth:2.0:oob"
)
}
let(:access_token) { Doorkeeper::AccessToken.create!(application: oauth_app) }
let(:authorization) { "Bearer #{access_token.token}" }
header 'Authorization', :authorization
get "/api/v1/group_runs" do
example_request "Getting a list of projects" do
status.should == 200
end
end
end