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

时间:2017-12-19 22:59:28

标签: ruby-on-rails rspec factory-bot

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

例如,我如何编写用于测试路由{{1}}

的规范

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

2 个答案:

答案 0 :(得分:0)

您可以使用Rack Test。

https://github.com/rack-test/rack-test

以下是一个例子。首先,我们将创建一个用户和一个相关的stock_list。您应该在功能测试中有这样做的示例。然后我们需要找到一种方法来传递所需的令牌。在机架测试中,您可以传递参数。您需要传递将在您的测试环境中工作的密钥和值。然后,您可以测试控制器操作实际产生您希望的结果。在这里,我假设我们计算了某个模型的0,并且在后期操作中创建了一个模型。

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

答案 1 :(得分: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