我正在为应用程序开发API。我正在尝试为需要参数的路由编写rspec请求测试,但也属于用户,我通常需要JWT令牌才能访问。
例如,我如何编写用于测试路由{{1}}
的规范为此,我需要一个也有库存清单的用户。我正在使用FactoryGirl并且我使用工厂进行功能测试,但我不确定如何在测试中包含这么多部件。
答案 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