Active Record字段存在于开发DB中,但不存在于Rails的测试DB中

时间:2017-07-23 14:22:13

标签: ruby-on-rails unit-testing

我是rails的新手,我一直在尝试为模态创建模型测试:用户并测试字段生日(类型:日期)。

这是我的模态测试

class UserTest < ActiveSupport::TestCase
  def setup
    @user = User.new(firstname: "FirstName", 
      lastname: "LastName",
      birthdate: "11.09.1980".to_date, 
      sex: "Frau",
      username: "username",
      email: "user@test.com",
      password: "password")

  test "Default user is valid"
    assert @user.valid?
  end

end

如果我运行测试,我会收到回复

  

ActiveRecord :: UnknownAttributeError:未知属性&#39; birthdate&#39;对于用户。       test / models / user_test.rb:5:在`setup&#39;

我现在真的很困惑。因为如果我在rails控制台中创建完全相同的用户(copy&amp; past),那么创建生日和访问或更改它就没有问题。这是我在rails console中创建用户后得到的结果

  

=&GT; #User id:nil,firstname:&#34; FirstName&#34;,lastname:&#34; LastName&#34;,sex:0,birthdate:&#34; 1980-09-11&#34;,用户名:& #34;用户名&#34;,电子邮件:&#34; user@test.com" ;, password_digest:&#34; $ 2a $ 10 $ T / TB ......&#34;

我将以下表格创建为迁移

  create_table "users", force: :cascade do |t|
      t.string  "firstname"
      t.string  "lastname"
      t.integer "sex"
      t.date    "birthdate"
      t.string  "username"
      t.string  "email"
      t.string  "password_digest"
    end

任何好的想法都会受到高度赞赏。我无法让我的考试通过。

2 个答案:

答案 0 :(得分:1)

可能你的开发数据库有生日,同时你的测试数据库没有,你可以尝试运行

rake db:test:prepare

将您当前的架构加载到测试数据库。并尝试再次运行测试

答案 1 :(得分:1)

您的测试数据库架构与开发不同步很常见。我在别名(&#39;重置测试数据库&#39;的首字母缩写词)中有这个,你可能会发现它很有用:

alias rtd='bundle exec rake db:drop db:create db:migrate RAILS_ENV=test'