我定义了:
views/pages/about.html.rb
的视图, spec/controllers/pages_controller_spec.rb
中的测试:
describe "GET 'about'" do
it "should be successful" do
get 'about'
response.should be_success
end
end
我不定义:
相应的行动:
class PagesController < ApplicationController
# def about
# end
end
routes.rb
中的路线:
Lily::Application.routes.draw do
# get "pages/about"
我在网络浏览器中收到错误,但只要定义了视图,RSpec测试就会成功通过 这是预期的行为吗?
我正在使用rspec-rails 2.0.1
,webrat 0.7.1
和rails 3.2.1
斯科特发现similar issue由rspec-rails
维护人员关闭。
答案 0 :(得分:4)
这是预期的(可能有点令人惊讶)行为。
如果你记住Rails如何区分问题,那就很有意义了 控制器不会在调度程序中发生路由。
尝试在测试中添加此内容:
raise controller.params.inspect
Failures:
1) PagesController GET pages/about
Failure/Error: raise controller.params.inspect
{"action"=>"about", "controller"=>"pages"}
get 'about'
不需要路由--Rails测试框架负责处理。由于规范已经知道它应该处理什么动作,因此它会继续并调用PagesController#about
。
缺点是,只要模板存在, Rails就不需要定义动作;它只会呈现about.html.erb
。
所以这个测试应该成功。当你实时调用它时,它会失败,因为没有路由。如果您编写了请求规范,路由规范或黄瓜测试,它也会失败。