Kristian Jacobsen
Kristian Jacobsen

Reputation: 13

Stubbing helpers rspec

I have a method in application_helper that is called admin_rights? to check if a user should be able to add content to the site. I haven't implemented a user system so it only returns true at the moment. But I am trying to test it, but I can't seem to find out how to stub it out so it returns false in the test. The spec checks for a link that should only be visible when admin_rights? returns true. When i test it manually by changing admin_rights? to false, it works as intended. So I am apparently not stubbing it out correctly.

The Spec is:

context "no admin rights" do
  before do 
    page.stub(:admin_rights?).and_return(false)
    visit fencers_path
  end
  it "should not have add fencer link" do
    expect(page).not_to have_link('+ Fekter', href: new_fencer_path)
  end
end

I'm looking for the correct way to stub it out or an alternative way to test it.

Upvotes: 1

Views: 72

Answers (1)

Yves Senn
Yves Senn

Reputation: 1996

The test case you posted is an acceptance test. It boots up a server instance and goes through the full stack. You should really not rely on stubbing and mocking in these kind of tests. They should ensure that the application as a whole works and should treat your application as a black box. To replace tiny bits of code is a recipe for very brittle acceptance tests. Also if you run your tests with a driver that runs Javascript then there is no chance to get the stubbing to work because the server runs in a different process than your tests do.

You should implement the logic for admin_rights? and then tune your acceptance test-setup that the logic actually returns false. For example sign in with a normal user, which does not have admin rights. In the end you want your acceptance tests to match closely to the real world scenario.

Upvotes: 1

Related Questions