【问题标题】:Rails spec: Template errorRails 规范:模板错误
【发布时间】: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


【解决方案1】:

从您收到的错误来看,您的路线中缺少:id,所以我怀疑您在规范中调用order_path 时没有将订单作为参数包括在内(如果你会包括规范代码)。

您应该在您的规范中调用任何成员操作(showupdatedestroy)的路径,如下所示:

visit order_path(@order)

(发布规范代码后,我会在此答案中添加更多内容。)

【讨论】:

  • 顺便说一句,非常感谢您的帮助。我对此感到困惑。在过去的一两个小时内进行了微小的更改并重新运行规范,但无济于事。
  • 所以考虑更多这一点,我认为(理想情况下)不应该是解决方法,实际上,因为订单页面是一种注册页面。它根本不按用户区分。所以没有(再一次,理想情况下)像 Order/1 这样的页面,尽管我正在尝试拥有个性化的确认页面。
  • "order/1" 不是 ID 为 1 的 user 的页面,而是 ID 为 1 的 order 的页面。所以我不明白您为什么一直提到“按用户区分”。所有用户的显示页面都是相同的。
  • 是的。我很困惑,因为我很困惑,对不起。目前我的网站没有“用户”模型。 “用户”(指浏览器上的人)下“订单”,然后进入数据库。我正在尝试使 /order 页面成为具有表单的页面,这些“用户”可以通过下订单来更新数据库。所以那个页面对每个人都是一样的。然后,他们将被定向到 /show 或 /confirmation 页面,该页面为他们打印订单(在此阶段)。
  • 无论如何。非常感谢您的回复。我会检查那个帖子。我只是不确定我是否正确沟通或理解。我只使用 Rails 几天,所以大部分内容都超出了我的想象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-11-10
相关资源
最近更新 更多