0

次のコードでテストしている orders/edit.html.erb にページがあります。

require 'spec_helper'

describe "orders/edit.html.erb" do
  before(:each) do
    @order = FactoryGirl.create(:order)
    #assign(:order, stub_model(Order,
    #  :new_record? => false,
    #  :email => "MyString",
    #  :name => "MyString"
    #))
  end

  it "renders the edit order form" do
    render :template => "orders/edit", :handlers => [:erb]

  end
end

ただし、次のテスト失敗エラー メッセージが表示されます。

orders/edit.html.erb renders the edit order form
     Failure/Error: render :template => "admin/fulfillment/orders/edit", :handlers => [:erb]
     ActionView::Template::Error:
       undefined method `name' for nil:NilClass

ここでは、orders/edit.html.erb で競合が発生しています。

<h3>New Order # <%= @order.number %></h3>
<legend>
  <% if @order.user.name && @order.user.waiter.name %>
  Diner: <%= @order.user.name %> / Waiter: <%= @order.user.waiter.name %>
  <% else %>
  No Name available <% end %>
</legend>
<div class="row">
...

更新: これが私の factory/order.rb です - 十分なユーザー データも生成していないため、nil がトリガーされますか?

FactoryGirl.define do
  sequence :number do |n|
    n
  end

      factory :order do
        number          #{ Factory.next(:number) }
        email           'email@e.com'
        state           'in_progress'
        user            { |c| c.association(:user) }
        bill_address_id    { |c| c.association(:address).id }
        ship_address_id    { |c| c.association(:address).id }
        active          true
        calculated_at   Time.now
        completed_at    Time.now

        after_build {|oi| oi.send(:initialize_state_machines, :dynamic => :force)}
      end
      factory :in_progress_order, :parent => :order do
        state           'in_progress'
      end

      factory :complete_order, :parent => :order do
        state           'complete'
      end

テストのどこが間違っているのでしょうか?合格するにはどうすればよいでしょうか?

4

1 に答える 1

0

が であるため、テストは失敗してい@order.user.stylistますnil。あなたのifステートメントでは、 と をチェックし@order.user.nameます@order.user.waiter.nameが、 はチェックしません@order.user.stylist.name

これを試して。

<h3>New Order # <%= @order.number %></h3>
<legend>
  <% if @order.user.name && @order.user.waiter.name && @order.user.stylist.name %>
    Diner: <%= @order.user.name %> / Waiter: <%= @order.user.stylist.name %>
  <% else %>
     No Name available 
  <% end %>
</legend>
<div class="row">
...
于 2013-02-15T19:35:58.450 に答える