如何为需要用户身份验证的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 服务配置多级身份验证?

如何为 2 台服务器设计用户身份验证

IdentityServer4:如何为 Google 用户设置角色?

如何为 .NET Core Web API 进行安全身份验证?

如何为我的 API 和我的 websocket 设置路由

服务器身份验证后如何为前端提供 JSON Web 令牌?