2016-12-14 52 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'不在您提供的代碼中,所以我只能根據我所看到的內容回答我的答案 –