我有两个模型:公司和用户。一个公司有多个用户,一个用户属于公司。我创建了一个嵌套表单:当您注册时,您必须创建公司和第一个用户。
这个表单工作起来很棒,但我真的不知道如何为它编写测试。下面是scaffold生成的功能测试:
test "should create company" do
assert_difference('Company.count') do
post :create, company: { city: @company.city, name: @company.name}
end
assert_redirected_to company_path(assigns(:company))
end下面是我为了测试用户创建所做的事情:
test "should create company and first user" do
assert_difference('Company.count') do
assert_difference('User.count') do
post :create, company: { city: @company.city, name: @company.name}, user: {name: @user.name, email: @user.email}
end
end
assert_redirected_to company_path(assigns(:company))
end当我运行我的测试时,出现以下错误:
1) Failure:
test_should_create_company_and_first_user(CompaniesControllerTest) [test/functional/companies_controller_test.rb:21]:
"User.count" didn't change by 1.
<3> expected but was
<2>.我在网上找不到帮助,所以我希望这里有人能帮我:)
发布于 2014-04-09 11:58:45
解决方案
公司模型
attr_accessible :city, :name, :users_attributes
has_many :users
accepts_nested_attributes_for :users用户模型
attr_accessible :email, :name
belongs_to :company公司控制器测试
test "should create company and first user" do
assert_difference('Company.count') do
assert_difference('User.count') do
post :create, company: {
city: @company.city,
name: @company.name,
users_attributes: {
user: {name: @user.name, email: @user.email},
user: {name: @user.name, email: @user.email}
}
}
end
end
assert_redirected_to company_path(assigns(:company))
end您可以在users_attributes中使用一个或多个用户进行测试。
感谢@drewinglis的帮助:D
发布于 2013-02-25 08:21:33
如果表单实际上是嵌套的,那么您应该将user对象放在测试请求中的company对象中,如下所示:
post :create, company: { city: @company.city, name: @company.name, user: {name: @user.name, email: @user.email} }https://stackoverflow.com/questions/15058198
复制相似问题