我有一个视图模板" show.html.haml",类似
- if current_user.admin?
balabala
它会得到"未定义的方法`admin?'为零:NilClass"而GET #show。我用"修复了它。 - if!current_user.nil? &安培;&安培; current_user.admin?&#34 ;.我想在RSpec中添加一个测试用例。
describe "before login user - " do
it "render the show template" do
book = FactoryGirl.create(:book)
get :show, id: book.id
expect(response).to render_template("show")
expect(response).to be_success
end
end
在运行" bin / rake spec"时,无论我是否添加条件"!current_user.nil?",它总能获得成功。如何在我想检查呈现是否显示'时如何编写expect子句。观点是成功的吗?
答案 0 :(得分:2)
当您尝试从controller spec
测试视图内容时,您无法直接执行此操作。
您可以使用render_views
声明执行此操作,但不推荐,而应选择request spec
或feature spec
来测试完整请求 - 响应周期。
全局设置render_views
:
RSpec.configure do |config|
config.render_views
end
规格:
describe "before login user - " do
it "render the show template" do
book = FactoryGirl.create(:book)
get :show, id: book.id
expect(response).to render_template("show")
expect(response.body).to match /balabala/
end
end
答案 1 :(得分:1)
默认情况下,视图不会在控制器规范中呈现。您需要通过编写render_views
(在describe
块中)明确启用它。请参阅参考:https://www.relishapp.com/rspec/rspec-rails/v/3-5/docs/controller-specs/render-views
答案 2 :(得分:0)
您需要在自己的规范中“登录”。请勿更改代码以使测试通过。检查呈现是否成功很简单,只需检查响应状态:
expect(response.status).to eq 200
答案 3 :(得分:0)
添加type: :view
,就像这样。
describe "before login user - ", type: :view do
it "render the show template" do
book = FactoryGirl.create(:book)
get :show, id: book.id
expect(response).to render_template("show")
expect(response).to be_success
end
end