如何为需要用户身份验证的API构建Rspec请求测试

问题描述 投票:0回答:2

我正在为应用程序开发API。我正在尝试为需要参数的路由编写rspec请求测试,但也属于用户,我通常需要JWT令牌才能访问。

例如,我如何编写测试路线POST /stocklist/:stocklist_id/balance/show的规范

为此,我需要一个也有库存清单的用户。我正在使用FactoryGirl并且我使用工厂进行功能测试,但我不确定如何在测试中包含这么多部件。

ruby-on-rails rspec factory-bot
2个回答
0
投票

您可以使用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

0
投票

您可以模拟返回登录用户的控制器方法,如下所示:

@user = FactoryGirl.create :user
# populate user with relationship objects

expect(controller).to_receive(:current_user).and_return(@user)

如果需要,您还可以使用授权令牌设置http标头

request.env['HTTP_AUTHORIZATION'] = token
© www.soinside.com 2019 - 2024. All rights reserved.