【问题标题】:Rails 4 - unit test failing to create model objectRails 4 - 单元测试无法创建模型对象
【发布时间】:2014-04-07 12:32:33
【问题描述】:

我想使用 shoulda 对应用程序进行单元测试。

在我正在做的测试中

User.create!(name: "James")

当我运行测试时,我收到以下错误:

ActiveRecord::StatementInvalid: Mysql2::Error: Field 'name' doesn't have a default value: INSERT INTO `users` (`created_at`, `updated_at`, `id`) VALUES ('2014-04-07 12:03:07', '2014-04-07 12:03:07', 980190962)

这和rails 4强参数有关系吗?

我该如何解决这个问题?

【问题讨论】:

    标签: unit-testing activerecord ruby-on-rails-4 shoulda


    【解决方案1】:

    检查您周围是否有无效的固定装置。尝试删除/修复test/fixtures/users.yml

    注意:您应该在单元测试中通过禁用 config/initializers/backtrace_silencers.rb 中的回溯消音器来获得完整的堆栈跟踪。

    【讨论】:

    • 这是我的问题,因为生成的 .yml 固定装置是之前由 rails 创建的。确保您的所有其他灯具都被注释掉或修复为正确的。谢谢!
    【解决方案2】:

    这和rails 4强参数有关系吗?

    不,强参数与此无关,因为您是直接从哈希创建对象,而不是从任何 ActionController::Parameters。

    问题来自其他地方(可能是您的数据库)。

    正如我从 article 看到的那样,解决您的问题的方法可能是像这样迁移您的字段:

    change_column :users, :name, :string, :limit => 255, :null => false, :default => ''
    

    【讨论】:

      【解决方案3】:

      我在运行单元测试时遇到了类似的问题。如果您的 mysql 数据库连接处于严格模式,则可能会发生这种情况。通过在 database.yml 中添加设置来禁用严格模式,如下所示并尝试。

      test:
        database:
          host: localhost
          name: test_db
          username: username
          password: password    
          strict: false
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-16
        • 2017-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多