尝试在rails 3中创建一个简单的应用程序。
如果我使用rails g scaffold team name:string && rake db:migrate
创建团队模型,然后运行rake
,我会从预建测试中获得成功。
如果我只是将validates_uniqueness_of :name
添加到团队模型中。功能测试失败
1) Failure:
test_should_create_team(TeamsControllerTest) [/test/functional/teams_controller_test.rb:20]:
"Team.count" didn't change by 1.
<3> expected but was
<2>.
我修改了tests / fixtures / teams.yml看起来像这样:
one:
name: MyString
two:
name: MyString2
测试仍然失败。
它不能比这更基本;我错过了什么?
答案 0 :(得分:10)
Fixtures基本上代表数据库中的模型实例。
如果你看一下test / functional / teams_controller_test.rb的顶部,你会看到
setup do
@team = teams(:one)
end
然后在你失败的功能测试中你会有
post :create, :team => @team.attributes
这就是正在发生的事情:你正在尝试创建一个与“团队命名为:one”属性相同的新团队。由于两者具有相同的名称(因为它们具有完全相同的属性),因此唯一性验证失败。
尝试使用此
替换您的设置块setup do
@team = teams(:one)
@team.name = 'unique name'
end
现在,您将创建一个名为“唯一名称”的新团队(根据灯具不在数据库中),您的测试将通过。