gpt4 book ai didi

unit-testing - 将 validates_uniqueness_of 添加到模型中会导致功能测试失败

转载 作者:行者123 更新时间:2023-12-01 15:05:46 25 4
gpt4 key购买 nike

尝试在 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

测试仍然失败。

没有比这更基础的了;我错过了什么?

最佳答案

夹具基本上代表数据库中的模型实例。

如果您查看 test/functional/teams_controller_test.rb 的顶部,您会看到

setup do
@team = teams(:one)
end

然后在您失败的功能测试中您将拥有

post :create, :team => @team.attributes

这就是正在发生的事情:您正在尝试创建一个具有与“名为 :one 的团队固定装置”相同属性的新团队。由于两者具有相同的名称(因为它们具有完全相同的属性),因此唯一性验证失败。

尝试用这个替换你的设置 block

setup do
@team = teams(:one)
@team.name = 'unique name'
end

现在您将创建一个名为“唯一名称”的新团队(根据固定装置,该名称不在数据库中),您的测试将通过。

关于unit-testing - 将 validates_uniqueness_of 添加到模型中会导致功能测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4169971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com