我试图理解为什么这个测试失败了。 (我对测试很陌生。)我正在使用内置的Rails测试框架,并添加了Shoulda gem。
测试:
require 'shoulda'
context "on GET to :new" do
setup do
get(:new)
end
should_render_template :new
should_not_set_the_flash
end
失败:
1) Failure:
test: on GET to :new should render template :new. (SessionsControllerTest)
[/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/controller /macros.rb:220:in `__bind_1233882600_699194'
/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/context.rb:254:in `call'
/usr/local/lib/ruby/gems/1.8/gems/thoughtbot-shoulda-2.0.6/lib/shoulda/context.rb:254:in `test: on GET to :new should render template :new. '
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:94:in `__send__'
/usr/local/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/testing/setup_and_teardown.rb:94:in `run']:
expecting <"new"> but rendering with <"">
2 tests, 2 assertions, 1 failures, 0 errors
但如果我使用app.get '/sessions/new'
在控制台上运行它,它可以正常工作,没有错误。
“new
”模板在浏览器中按预期呈现。
我正在使用Haml。也许这会导致问题。我的模板名为“new.html.haml
”。
答案 0 :(得分:8)
失败表示没有渲染任何模板。尽量确保没有使用
重定向should_respond_with :success
并断言@ response.body的内容只是为了查看已发回的内容
# This will fail but should give you some clue about what was sent back.
should "sent something back in the body" do
assert_match 'boohooo', @response.body
end
你也可以断言一个特定的模板,所以你也可以试一试:
should_render_template "new.html.haml"
但是,我并不怀疑HAML是导致问题的原因。
答案 1 :(得分:0)
我遇到了与Shoulda,Clearance和Rails 2.3.2类似的问题。我想我通过修改shoulda和clearance如何使用'assert_template'解决了这个问题。显然,Rails中有一个与此相关的漏洞。
请参阅此主题以获取更多信息以及我对差异的区别(Clearance和Shoulda中的一行更改)。
http://groups.google.com/group/shoulda/browse_thread/thread/8c0a66c80ff4fd76