【问题标题】:How to test devise views with rspec如何使用 rspec 测试设计视图
【发布时间】:2015-11-28 06:00:58
【问题描述】:

我想用 rspec 测试我的注册视图。

我已经尝试了很多类似这里建议的事情Testing devise views with rspecTesting Views that use Devise with RSpec

但似乎没有任何问题,我总是收到如下错误:

undefined local variable or method `resource'

does not implement: resource

我目前的规范(spec/views/devise/registrations/new.slim_spec.rb):

require 'rails_helper'

RSpec.describe 'devise/registrations/new.slim', type: :view do

  describe 'sign up form' do

    before do
      allow(view).to receive(:resource).and_return(User.new)
      allow(view).to receive(:resource_name).and_return(:user)
    end

    it 'does not contains an area for user avatar' do
      render
      expect(rendered).to_not include('Profile Pic')
    end
  end
end 

我的环境:

  • 导轨 4.2.3
  • 设计 3.5.1
  • rspec 3.3.0

我做错了什么?感谢您的帮助。

编辑:

我将代码移至控制器规范,它可以工作,但并不完美,但...

RSpec.describe Users::RegistrationsController, type: :controller do
  before(:each) do
    request.env['devise.mapping'] = Devise.mappings[:user]
  end

  describe '#new' do
    render_views

    it 'does not contains an area for user avatar' do
      get :new
      expect(response.body).to_not include('Profile Pic')
    end
  end
end

【问题讨论】:

标签: ruby-on-rails rspec devise


【解决方案1】:

1。在 rails_helper.rb 中设置配置

RSpec.configure do |config|
  config.include Devise::Test::ControllerHelpers, type: :view
  config.include Devise::Test::ControllerHelpers, type: :controller

  # add these if you need other type of rspec.
  # config.include Devise::Test::IntegrationHelpers, type: :feature
  # config.include Devise::Test::IntegrationHelpers, type: :request
end

2。你的观点 Rspec。

# frozen_string_literal: true
require 'rails_helper'

RSpec.describe 'rendering locals in a partial', type: :view do
  let(:user) { create(:user) }

  before :each do
    sign_in user
  end

  it "displays the widget" do
    widget = Widget.create!(:name => "slicer")

    render :partial => "widgets/widget.html.erb", :locals => {:widget => widget}

    expect(rendered).to match /slicer/
  end
  end
end

【讨论】:

    【解决方案2】:

    【讨论】:

    • 看来您建议 OP 将他的代码移动到功能/集成测试中。如果他的目标是对视图进行单元测试,这并不能回答问题。
    猜你喜欢
    • 2013-01-03
    • 2015-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多