2016-12-14 103 views
0

Rails的5.0.0.1 Rspec的3.5.4 红宝石2.3.1Rspec的不是测试渲染,不会让我们存根渲染动作

我们一直在努力为我们的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 

的Rails:

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存根,安装了宝石rails-控制器测试(不是rspec),但我们已经用完了想法,每个谷歌链接都是紫色的。这是Rspec中的一个错误还是我们错误的方式?

回答

0

我相信刺伤是不正确的。尝试下面的代码,它应该工作。

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 
+0

感谢您的回应!我们仍然收到相同的错误:expecting <"errors/5xx"> but rendering with <[]> ./spec/controllers/packages_controller_spec.rb:91:in 'block (4 levels) in ' -e:1:in 'load' -e:1:in '

'我认为我们需要存储渲染以提供代码覆盖率,但无法找到解决方法。你有什么想法? – rkentmc

+0

这工作:'上下文 'URI无效' 做 做 之前允许(PackageServices)。为了接收(:getpackage).and_raise(URI :: InvalidURIError) 结束 这404之后,从GET #edit返回错误200 '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

+0

@rkentmc'ensure_logged_in'不在您提供的代码中,所以我只能根据我所看到的内容回答我的答案 –