【问题标题】:How to structure Rspec Request tests for APIs requiring user authentication如何为需要用户身份验证的 API 构建 Rspec 请求测试
【发布时间】:2017-12-19 22:59:28
【问题描述】:

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

例如,我将如何编写一个规范来测试路由POST /stocklist/:stocklist_id/balance/show

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

【问题讨论】:

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


    【解决方案1】:

    您可以使用机架测试。

    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
    

    【讨论】:

      【解决方案2】:

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

      @user = FactoryGirl.create :user
      # populate user with relationship objects
      
      expect(controller).to_receive(:current_user).and_return(@user)
      

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

      request.env['HTTP_AUTHORIZATION'] = token
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-09
        • 2017-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多