我在訂單頁/ 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
我在做什麼錯誤的測試什麼,我需要做的就是它通過?
我們可以看看您的factories.rb嗎? – hdgarrood 2013-02-15 19:35:54
請同時添加Orders控制器和編輯動作 – Huy 2013-02-15 19:47:12
查看Demeter Law的一些很酷的重構,包括@ order.user.name調用 - http://rails-bestpractices.com/posts/15-the-law- demeter – 2013-02-17 18:50:27