Rails 4 - 单元测试无法创建模型对象

时间:2014-04-07 12:32:33

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

我想使用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强参数有关吗?

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

  

这与rails 4强参数有关吗?

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

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

正如我在article中看到的那样,您的问题的解决方案可能是迁移您的字段:

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

答案 2 :(得分:0)

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

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