Rspec: how to spec request.env in a helper spec?

15,009

Solution 1

If you're using rspec-rails, you might be able to use controller.request in your helper tests.

Solution 2

Well, you've almost nothing to do:

before(:each) do
  @meth = :abc

  request.env['HTTP_USER_AGENT'] = "..."
end

I just gave this another try and this passes:

#in helper
def foo
  request.env['HTTP_USER_AGENT']
end

#spec
it "foo" do
  helper.request.env['HTTP_USER_AGENT'] = 'foo'
  expect(helper.foo).to eq 'foo'
end

Solution 3

You can override user-agent set in the request env by doing the following.

before(:each) do
  @meth = :abc
  helper.request.user_agent = 'something else'
end

Then, in your spec:

it "does stuff" do
  expect(helper.send(@meth, "some_url")).to # ...
end

Solution 4

for those who use request specs instead of controller specs and want to set request.env can do it like this:

Rails.application.env_config["whatever"] = "whatever"

this will make request.env["whatever"] available in your controllers with value you gave it in your specs.

Solution 5

Try this:

stub(request).env { {"HTTP_USER_AGENT" => "Some String"} }

Share:
15,009

Related videos on Youtube

RoundOutTooSoon
Author by

RoundOutTooSoon

A weekday coder and a weekend flyer. Trying to improve both of my coding and flying skills.

Updated on June 05, 2022

Comments

  • RoundOutTooSoon
    RoundOutTooSoon almost 2 years

    In my helper module, I have:

    def abc(url)
      ...
      if request.env['HTTP_USER_AGENT']
        do something
      end
    end
    

    In my spec file, I have:

      describe "#abc" do      
    before(:each) do
      @meth = :abc
    
      helper.request.env['HTTP_USER_AGENT'] = "..."
    end
    it "should return the webstart jnlp file" do
      @obj.send(@meth, "some_url").should ....
    end
    end
    

    When I run the spec I have this error:

    undefined local variable or method `request' for <ObjectWithDocHelperMixedIn:0x00000103b5a7d0>
    

    How do I stub for request.env['...'] in my specs?

    Thanks.

  • apneadiving
    apneadiving about 12 years
    I do this in controller specs though... never tried in helper specs.
  • RoundOutTooSoon
    RoundOutTooSoon about 12 years
    thanks for your reply. Yeah I tried that before too but it didn't work in helper specs (at least in my case).
  • apneadiving
    apneadiving about 12 years
    one easy workaround would be to extract condition to methods in your helper and stub those methods