我正在用Rails测试水域,我坚持这个简单的测试:
我在spec / routing / routing_spec.rb
中有这段代码 require 'spec_helper'
describe "Accessing the root domain" do
it "should route to home#index" do
{ :get => '/' }.
should route_to(:controller => 'home', :action=>'index')
end
end
此操作失败,并显示以下错误:
Failure/Error: { :get => '/' }.
Expected block to return true value.
# ./spec/routing/routing_spec.rb:7:in `block (3 levels) in <top (required)>'
我的代码有什么问题?
答案 0 :(得分:1)
我在Rails 3和Ruby 1.9.2中遇到了这个不透明的错误消息。我的理由是我使用的是旧版本的minitest,它附带Ruby,在那个版本中,assert_block方法(由ActionDispatch :: Assertions :: RoutingAssertions中的assert_recognizes调用)不显示错误消息(路由如何) params不匹配)。对我来说,修复是将minitest添加到我的Gemfile并通过bundler安装它:
group :test do
gem "minitest", ">= 2.6.1" # The minitest version that ships with Ruby is old and has bugs
end
然后我会得到一条更容易理解的错误消息:
The recognized options <{"action"=>"index",
"controller"=>"publish/product_versions",
"product_id"=>"ipad_app"}> did not match <{"controller"=>"publish/product_versions",
"action"=>"indexx",
"product_id"=>"ipad_app"}>, difference: <{"action"=>"indexx"}>.
Expected block to return true value.
答案 1 :(得分:0)
这似乎应该可行,所以我的猜测是存在配置问题。但是,很难知道它是什么,没有看到更多的应用程序。此外,失败说它发生在第7行,但是它引用了上面代码中的第5行,因此文件中可能还有其他内容正在使作品变得不合适。
此外,错误消息令人困惑,因为期望写在两行上。如果你在一行上写下它,你会看到整个声明。并不是说这有助于缩小这个问题的范围,除了帮助你理解它并没有试图将{ :get => '/' }
视为一个块。
HTH, 大卫
答案 2 :(得分:-1)
这发生在我身上,因为我的控制器渲染了错误的视图。我修改了控制器方法的逻辑,一切正常。