如何为需要用户身份验证的API构建Rspec请求测试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为需要用户身份验证的API构建Rspec请求测试相关的知识,希望对你有一定的参考价值。
我正在为应用程序开发API。我正在尝试为需要参数的路由编写rspec请求测试,但也属于用户,我通常需要JWT令牌才能访问。
例如,我如何编写测试路线POST /stocklist/:stocklist_id/balance/show
的规范
为此,我需要一个也有库存清单的用户。我正在使用FactoryGirl并且我使用工厂进行功能测试,但我不确定如何在测试中包含这么多部件。
答案
您可以使用Rack Test。
https://github.com/rack-test/rack-test
以下是一个例子。首先,我们将创建一个用户和一个相关的stock_list。您应该在功能测试中有这样做的示例。然后我们需要找到一种方法来传递所需的令牌。在机架测试中,您可以传递参数。您需要传递将在您的测试环境中工作的密钥和值。然后,您可以测试控制器操作实际产生您希望的结果。在这里,我假设我们计算了某个模型的0,并且在post动作中创建了一个模型。
describe 'my_api' do
let!( :user ){ create :user }
let!( :stock_list ){ create :stock_list, user: user }
specify do
expect( SomeModel.count ).to eq 0
post "/stocklist/#{stock_list.id}/balance/show", { token: "some_token" }
expect( SomeModel.count ).to eq 1
expect( last_response.status ).to eq 200
expect( JSON.parse( last_response.body, symbloize_keys:true )[:my_value] ).to eq 'something'
end
end
另一答案
您可以模拟返回登录用户的控制器方法,如下所示:
@user = FactoryGirl.create :user
# populate user with relationship objects
expect(controller).to_receive(:current_user).and_return(@user)
如果需要,您还可以使用授权令牌设置http标头
request.env['HTTP_AUTHORIZATION'] = token
以上是关于如何为需要用户身份验证的API构建Rspec请求测试的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Spring Boot RESTful Web 服务配置多级身份验证?
IdentityServer4:如何为 Google 用户设置角色?