Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Testing devise views with rspec

I have generated Devise's views running rails g devise:views and would now like to test them.

This is what I have come up with:

require 'spec_helper'

describe "devise/sessions/new" do
    before do
        render
    end

    it "renders the form to log in" do
        rendered.should have_selector("form", action: user_session_path, method: :post) do |form|

        end
    end
end

For the render statement it gives me undefined local variable or method 'resource'. After googling around I found that I should add

@user.should_receive(:resource).and_return(User.new)

before the render statement - but it still gives me the same error, and I am not really sure how to use it.

What am I doing wrong? Thanks for your help.

like image 805
weltschmerz Avatar asked Jan 20 '13 16:01

weltschmerz


1 Answers

I wanted to do @MikeFogg's solution - I do something similar in another view spec to deal with Pundit - but of course I ran up against the issue @ChrisEdwards pointed out with regards to needing mocks.verify_partial_doubles = false.

However, I was not much interested in turning that off across my whole test suite, it's a good check, "generally recommended" and default in Rspec 4+.

I actually first posted a solution here where I reconfigured RSpec in before/after blocks, but I ran across a really, really easy way to do this, and it works great:

  before(:each) do
    without_partial_double_verification do
      allow(view).to receive(:resource).and_return(Student.new)
      allow(view).to receive(:resource_name).and_return(:student)
      allow(view).to receive(:devise_mapping).and_return(Devise.mappings[:student])
    end
    # other before_each configuration here as needed
  end

This has been around since 2016 and was originally called without_verifying_partial_doubles, but was renamed to the current without_partial_double_verification. Does not appear to be documented anywhere I can see.

like image 62
stephan.com Avatar answered Oct 13 '22 00:10

stephan.com