hom*_*ast 2 validation rake unit-testing ruby-on-rails-3
试图在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>.
Run Code Online (Sandbox Code Playgroud)
我修改了tests/fixtures/teams.yml看起来像这样:
one:
name: MyString
two:
name: MyString2
Run Code Online (Sandbox Code Playgroud)
测试仍然失败.
它不能比这更基本; 我错过了什么?
Dav*_*ulc 10
Fixtures基本上代表数据库中的模型实例.
如果你看一下test/functional/teams_controller_test.rb的顶部,你会看到
setup do
@team = teams(:one)
end
Run Code Online (Sandbox Code Playgroud)
然后在你失败的功能测试中你会有
post :create, :team => @team.attributes
Run Code Online (Sandbox Code Playgroud)
这就是正在发生的事情:您正在尝试创建一个与"团队命名为:one"属性相同的新团队.由于两者具有相同的名称(因为它们具有完全相同的属性),因此唯一性验证失败.
尝试用此替换您的设置块
setup do
@team = teams(:one)
@team.name = 'unique name'
end
Run Code Online (Sandbox Code Playgroud)
现在,您将创建一个名为"唯一名称"的新团队(根据灯具不在数据库中),您的测试将通过.
归档时间: |
|
查看次数: |
465 次 |
最近记录: |