-1

我有一个规范类型::请求,我想通过 ApiAuth 添加身份验证。我怎样才能做到这一点?

ApiAuth 使用请求对象进行身份验证

ApiAuth.sign!(request, user.id, user.api_secret_key)

我可以在控制器的规格中使用它,如下所示

request.env['HTTP_ACCEPT'] = 'application/json'
user = defined?(current_user) ? current_user : Factory.create(:admin_user)
ApiAuth.sign!(request, user.id, user.api_secret_key)

但是请求的规范中缺少请求对象

describe 'Cities API', type: :request do
  let(:cities) { City.all }
  let(:admin_user) { Factory.create(:admin_user) }

  context 'given an unauthorized request' do
    it 'returns 401 status' do
      get '/api/cities'

      expect(response).to have_http_status(:unauthorized)
    end
  end

  context 'given an authorized request' do
    it 'sends a list of cities' do
      # i need authorization here
      get '/api/cities'

      expect(response).to be_success
    end
  end
end

现在我存根认证

describe 'Cities API', type: :request do
  let(:cities) { City.all }
  let(:admin_user) { Factory.create(:admin_user) }

  before { Factory.create(:route) }

  context 'given an unauthorized request' do
    it 'returns 401 status' do
      get '/api/cities'

      expect(response).to have_http_status(:unauthorized)
    end
  end

  context 'given an authorized request' do
    before(:each) do
      allow_any_instance_of(CitiesController).to receive(:authenticate_user!).and_return(true)
      allow_any_instance_of(CitiesController).to receive(:admin_user).and_return(admin_user)
    end

    it 'sends a list of cities' do
      get '/api/cities'

      expect(response).to be_success
    end
  end
end

但我想避免在请求规范中使用存根。有人有什么想法吗?

4

1 回答 1

-2

我在 github 上创建了问题。你可以在这里观看我的解决方案

于 2016-05-25T08:29:15.147 回答