【问题标题】:Rspec not testing render, won't allow us to stub render actionRspec 不测试渲染,不允许我们存根渲染动作
【发布时间】:2016-12-14 20:30:00
【问题描述】:

导轨 5.0.0.1 Rspec 3.5.4 红宝石 2.3.1

我们一直在尝试为我们的 rails 应用程序提供测试覆盖率。我们在 Rspec 没有达到的私有方法中进行了救援。

Rspec:

it 'returns 200 after 404 from GET #edit error' do
  allow(controller).to receive(:getpackages).and_return(URI::InvalidURIError)    
  expect(response.code).to eq(200) # => covers the 200
  expect(response).to render_template('errors/5xx') # => doesn't read 
end

导轨:

private

def set_package
  @package = PackageServices.getpackage params[:id]
rescue URI::InvalidURIError
  render 'errors/5xx'
end

错误信息:

expecting <"errors/5xx"> but rendering with <[]>
  ./spec/controllers/packages_controller_spec.rb:139:in `block (3 levels) in <top (required)>'
  -e:1:in `load'
  -e:1:in `<main>'

我们尝试过 assert_template,尝试使用 stub_template 对其进行存根,安装了 gem rails-controller-testing(不是 rspec),但我们已经没有想法了,每个 google 链接都是紫色的。这是 Rspec 中的一个错误,还是我们以错误的方式处理它?

【问题讨论】:

    标签: ruby-on-rails ruby unit-testing rspec


    【解决方案1】:

    我认为刺伤是不正确的。试试下面的代码,应该可以了。

    context 'URI is invalid' do
      before do
        allow(PackageServices).toreceive(:getpackage).and_raise(URI::InvalidURIError)
      end
    
      it 'returns 200 after 404 from GET #edit error' do  
        expect(response.code).to eq(200) # => covers the 200
        expect(response).to render_template('errors/5xx') # => doesn't read 
      end
    end
    

    【讨论】:

    • 感谢您的回复!我们仍然遇到同样的错误:expecting 但使用 ./spec/controllers/packages_controller_spec.rb:91:in block (4 levels) in &lt;top (required)&gt;' -e:1:in load' -e:1:in 渲染`
      '
      我认为我们需要存根渲染以提供代码覆盖率,但找不到方法。你有什么想法吗?
    • 这工作:context 'URI is invalid' do before do allow(PackageServices).to receive(:getpackage).and_raise(URI::InvalidURIError) end it 'returns 200 after 404 from GET #edit error' do allow(controller).to receive(:ensure_logged_in).and_return(true) get :edit, params: { id: 1 } expect(response.code).to eq('200') expect(response).to render_template('errors/5xx') end end
    • @rkentmc ensure_logged_in 不在你提供的代码中,所以我只能根据我所看到的来回答
    • 只是更新条目以防其他人遇到类似问题。我们没有调用正确的资源,在这种情况下,它将是我们的 get 方法的一个实例
    猜你喜欢
    • 1970-01-01
    • 2012-04-09
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多