我已经定义了:
views/pages/about.html.rb
的 View ,spec/controllers/pages_controller_spec.rb
中的测试:describe "GET 'about'" do it "should be successful" do get 'about' response.should be_success end end
我没有定义:
相应的 Action :
class PagesController < ApplicationController # def about # end end
routes.rb
中的一条路线:Lily::Application.routes.draw do # get "pages/about"
我在 Web 浏览器中收到错误,但只要定义了 View ,RSpec 测试就会成功通过。
这是预期的行为吗?
我正在使用 rspec-rails 2.0.1
、webrat 0.7.1
和 rails 3.2.1
。
斯科特找到了一个similar issue由 rspec-rails
维护者关闭。
最佳答案
这是预期的(可能有些令人惊讶的)行为。
如果您牢记 Rails 如何分离关注点,就会明白这一点。
Controller 不进行路由——这发生在调度程序中。
尝试在你的测试中添加这个:
提高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 就不需要定义 Action ;它只会呈现 about.html.erb
。
所以这个测试应该成功了。当您实时调用它时,它会失败,因为没有路由。如果您编写了请求规范、路由规范或 Cucumber 测试,它也会失败。
关于ruby - 尽管未定义操作和路由,但 RSpec 成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9428974/