Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Appending headers to Rspec controller tests

I'm trying to write out tests for a controller of mine that takes in requests from external services. So far this is my test:

describe ApplyController do
  context 'when valid' do
    let(:parameters) do
      file = File.join File.dirname(__FILE__), '..', 'samples', 'Indeed.json'
      JSON.parse(File.read file)
    end
    let(:signature) { 'GC02UVj0d4bqa5peNFHdPQAZ2BI=' }

    subject(:response) { post :indeed, parameters, 'X-Indeed-Signature' => signature }

    it 'returns 200 ok if Request is valid' do
      expect(response.status).to eq 200
    end
  end
end

This should work according to the documentation I could find.

My controller right now looks something like this:

class ApplyController < Application Controller
  def indeed
    binding.pry
  end
end

When I get into Pry in my test and try to check the value of request.headers['X-Indeed-Signature'] I always just get nil

Is there something that I am missing? I am using Rails 3.2 and Rspec 3

like image 790
Dave Long Avatar asked Dec 11 '13 21:12

Dave Long


1 Answers

I had many issues with the rubocop to avoid it, I wanted to put the headers into let. In addition call request.headers.merge! instead of @request.headers['key']=value.

I took the fix from here:

describe ApplyController do
  context 'when valid' do
    let(:parameters) do
      file = File.join File.dirname(__FILE__), '..', 'samples', 'Indeed.json'
      JSON.parse(File.read file)
    end
    let(:headers) do
      {
        signature: 'GC02UVj0d4bqa5peNFHdPQAZ2BI='
      } 


    it 'returns 200 ok if Request is valid' do
      request.headers.merge! headers
      post :indeed, parameters
      expect(response.status).to eq 200
    end
  end
end
like image 80
Ehud Lev Avatar answered Oct 04 '22 02:10

Ehud Lev