【发布时间】:2012-08-22 07:00:41
【问题描述】:
我正在尝试根据 Michael Hartl 在他的教程中的用户模型创建一个订单模型来接收订单。
我在 View 的 Orders 目录中创建了一个基本的订单页面和确认页面。我为内容创建了测试,当我运行它们时,它们会显示出各种各样的错误,大多数都与此有关:
Failure/Error: before { visit root_path }
ActionView::Template::Error:
No route matches {:action=>"show", :controller=>"orders"}
我认为这与缺少视图有关(“模板”的原因),但正如我所说,我有这些文件。在我的 routes.rb 文件中,我有以下内容:
resources :orders
root to: 'alpha#welcome'
match '/order', to: 'orders#new'
match '/about', to: 'alpha#about'
match '/contact', to: 'alpha#contact'
match '/confirmation', to: 'orders#show'
我的订单控制器是这样说的:
class OrdersController < ApplicationController
def show
@order = Order.find(params[:id])
end
def new
@order = Order.new
end
end
我一直在梳理他的教程,试图找出我做错了什么,但还没有任何效果。帮助?我对此很陌生。
哦。另外令人困惑的是,rspec 声称它在一个根本不尝试遵循这些路线的规范文档中遇到了这个问题。 (我有三个规范:一个用于静态页面,一个用于订单模型,一个用于订单页面。静态页面一是抱怨订单模型控制器中的操作。)
谢谢,根据要求,这是我的订单页面规范:
require 'spec_helper'
describe "Order Pages" do
subject { page }
describe "order page" do
before {visit order_path}
it { should have_selector('h1', text: 'Order Below') }
it { should have_selector('title', text: 'Order') }
end
describe "confirmation page" do
let(:order) { FactoryGirl.create(:order) }
before { visit confirmation_path(order) }
it { should have_selector('h1', text: 'Your order:') }
it { should have_selector('title', text: 'Order') }
end
end
【问题讨论】:
-
另外,
match '/order', to: 'orders#new'在您的路线中看起来确实错误,如果您有资源路线,则不需要它。 -
所以就像我想的那样,如果您不传递实际订单,您的
visit order_path将会失败。您需要像在确认页面规范中一样创建一个,然后将其传递给您的 before 块中的order_path。 -
对不起。我有点困惑。那么我在确认页面规范中的做法是正确的,我应该在控制器中做同样的事情吗?
-
并把匹配的'/order'剪掉,变成:'orders#new'?
-
啊。我想我明白了。将我在确认规范中的内容添加到订单规范中。我也应该切断到确认页面的路线吗?还是不包含在资源路由中?
标签: ruby-on-rails templates rspec