0
我的测试是这样的:我是否需要在此测试中创建每个对象?
def setup
@period_registration= FactoryGirl.create(:period_registration)
end
test "should post save_period" do
sign_in(FactoryGirl.create(:user))
assert_difference('PeriodRegistration.count') do
post :save_period, period_registration: FactoryGirl.attributes_for(:period_registration)
end
assert_not_nil assigns(:period_registration)
end
但是当我运行它,我得到这个错误:
1) Error:
test_should_post_save_period(PeriodRegistrationsControllerTest):
NoMethodError: undefined method `event' for nil:NilClass
这里是我的控制器:
def save_period
@period_registration = PeriodRegistration.new(params[:registration])
@period_registration.save
flash[:success] = "Successfully Registered for Session."
redirect_to event_url(@period_registration.period.event)
end
我的工厂是这样的:
factory :event do
name 'First Event'
street '123 street'
city 'Chicago'
state 'Iowa'
date Date.today
end
factory :period do
name 'First Period'
description 'This is a description'
start_time Time.now + 10.days
end_time Time.now + 10.days + 2.hours
event
product
end
factory :period_registration do
user
period
end
我是否需要创建句点对象和事件对象?如果是这样如何?我不认为这是问题,因为我相信在各个工厂中有“时期”,然后是“产品”,然后是“事件”会自动产生这些问题。
任何想法从哪里看?
关于你的#1,这是行不通的。我在控制台中测试了它,并且需要执行'pr.period.event'来获取事件。 –
你的#3帮助我解决了另一个问题,虽然我正在做! –
@NoahClark关于#1。您必须在PeriodRegistration模型中创建新方法。我已经更新了我的答案。 –