我有兩種型號:User
和Topic
。用戶可以擁有屬於一個用戶的許多主題和主題。爲什麼Test :: Unit測試不能在`post:create`中保存模型?
在我的主題控制器,我想測試一個有效的主題創建行動:
測試
# topics_controller.test.rb
def test_create_valid
sign_in Factory(:user) # Devise will redirect you to the login page otherwise.
topic = Factory.build :topic
post :create, :topic => topic
assert_redirected_to topic_path(assigns(:topic))
end
工廠(工廠女孩)
# factories.rb
Factory.define :user do |f|
f.sequence(:username) { |n| "foo#{n}"}
f.password "password"
f.password_confirmation { |u| u.password}
f.sequence(:email) { |n| "foo#{n}@example.com"}
end
Factory.define :topic do |f|
f.name "test topic"
f.association :creator, :factory => :user
end
測試輸出
ERROR test_create_valid (0.59s)
ActionController::RoutingError: No route matches {:action=>"show", :controller=>"topics", :id=>#<Topic id: nil, name: nil, created_at: nil, updated_at: nil, creator_id: 1>}
/usr/local/lib/ruby/gems/1.9.1/gems/actionpack-3.0.7/lib/action_dispatch/routing/route_set.rb:425:in `raise_routing_error'
在測試中,topic.valid?
爲真和topic.name
具有從工廠的值。
但是,帖子似乎並沒有通過post :create, :topic => topic
。它看起來像從未保存在數據庫中,因爲它甚至沒有在測試輸出中的id。
編輯:即使我繞過工廠的新主題,它不起作用。
def test_create_valid
@user = Factory :user
sign_in @user
topic = @user.topics.build(:name => "Valid name.")
post :create, :topic => topic
assert_redirected_to topic_path(assigns(:topic))
end
結果出現相同的測試錯誤。
哦男人。對象vs params。我從來沒有想過這件事。 – danneu 2011-05-08 03:09:08