次のコードでテストしている 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
テストのどこが間違っているのでしょうか?合格するにはどうすればよいでしょうか?