【问题标题】:Rails Functional Test With Fixtures Failing with "Mysql::Error: Duplicate entry"带有“Mysql::Error: Duplicate entry”的夹具失败的 Rails 功能测试
【发布时间】:2011-06-19 13:19:46
【问题描述】:

所以我们有针对 User 模型的默认脚手架测试,具体来说:

  test "should create user" do
    assert_difference('User.count') do
      post :create, :user => @user.attributes
    end

    assert_redirected_to user_path(assigns(:user))
  end

我们有一个用户装置:

  one:
    email: test2@test.com
    name: Joe Smith

问题是测试失败:

1) 错误: test_should_create_user(UsersControllerTest): ActiveRecord::RecordNotUnique: Mysql::Error: 重复条目 键 2 的“test2@test.com”:插入 INTOusers

似乎正在发生的事情是 rails 加载了固定装置,然后尝试使用相同的“一个”数据再次创建用户,并且唯一性约束失败。这一切都说得通。问题是,如果您需要从测试中创建的用户对象的夹具文件中提取数据,如果相同的夹具用于预填充数据库,我们如何测试这一点?

【问题讨论】:

  • Rails 4 和 mysql 中仍然存在问题。您找到解决方案了吗?

标签: ruby-on-rails unit-testing fixtures


【解决方案1】:

最棘手的解决方案是将电子邮件参数更改为,以便向创建操作发送不同的电子邮件地址。

但是,我认为一个更好、更长期的解决方案是改用 FactoryGirl 而不是固定装置。通过这种方式,您可以控制何时在测试数据库中创建记录,并能够随着数据模型的发展调整 FactoryGirl 生成的内容。

然后我会修改上面的调用,将正确的参数发送到 create 操作并让测试通过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多