2013-02-15 12 views
0

我在訂單頁/ edit.html.erb說我用下面的代碼測試:RSpec的:工廠女孩查看測試生成一個「未定義的方法」的錯誤

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 

這裏就是衝突的訂單情況/ 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"> 
... 

更新:這裏是我的工廠/ order.rb - 我沒有產生足夠的用戶數據,觸發nil?

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

     factory :order do 
     number   #{ Factory.next(:number) } 
     email   '[email protected]' 
     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 

我在做什麼錯誤的測試什麼,我需要做的就是它通過?

+0

我們可以看看您的factories.rb嗎? – hdgarrood 2013-02-15 19:35:54

+0

請同時添加Orders控制器和編輯動作 – Huy 2013-02-15 19:47:12

+0

查看Demeter Law的一些很酷的重構,包括@ order.user.name調用 - http://rails-bestpractices.com/posts/15-the-law- demeter – 2013-02-17 18:50:27

回答

0

您的測試失敗,因爲@order.user.stylistnil。在您的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"> 
... 
+0

@mztwo剛剛更新了我的答案 – Huy 2013-02-15 19:56:41

+0

抱歉 - 這是我的一個錯字。我的代碼實際上確實有「服務員」,我只是在玩一個模型。我編輯並提供了上述正確的erb代碼。 – mztwo 2013-02-15 22:02:22

+0

@mztwo「nil:NilClass」的未定義方法名稱的錯誤點在哪? – Huy 2013-02-15 22:05:04

相關問題