Rails 测试用例未定义列

Rails TestCase UndefinedColumn

rails 世界的新手。使用 4.2.4.

我正在尝试为我的应用程序创建一个模型并为其编写一些单元测试,但是在 运行 进行更改迁移后我 运行 遇到了困难。我用

创建了一个模型

rails generate model player first_name:string last_name:string dispaly_name:string

和运行rake db:migrate RAILS_ENV=test

然后我编写了一个(失败的)单元测试以确保在调用保存时设置了正确的字段。此时,我意识到我拼错了dispaly_name,所以我创建了一个修复列名的更改迁移。

现在,当我尝试 运行 单元测试 rake test test/models/player_test.rb 时,出现错误 (UndefinedColumn),提示保存失败,因为 Player 模型仍然存在试图用 dispaly_name 而不是 display_name 来保存。我 运行 rake db:migrate rake db:migrate RAILS_ENV=test rake db:test:prepare 和 运行 rails cRAILS_ENV=test rails c 并检查列名称是否由 运行宁Player.column_names。我还检查了 schema.rb。一切似乎都井井有条,但我不明白为什么我的测试用例中的 Player.new 使用旧的列名。

谁能解释一下这是怎么回事?

我知道了:

when you create model then a fixture along with test file is created.

您使用字段名称 dispaly_name 创建了模型,并在文件 YourApp/test/fixtures/player_test.yml 中创建了一个字段 dispaly_name。正确的?。

但问题是,当您将字段名称更改为 display_name 时,它在 MODELTABLE 中也会发生变化,但不会在夹具文件中发生变化。所以你也需要更正夹具文件中的字段。

请更改文件 YourApp/test/fixtures/player_test.yml

中的字段名称 dispaly_name

我希望它会起作用:)

根据您用来填充测试数据库的内容,FactoryGirlFabrication 或默认的 Fixtures 提出一个 Rails 应用程序,更改那里的数据字段名称。然后错误就会消失。

如果错误仍然存​​在,请尝试重新启动服务器以防万一。我认为重启服务器不会有任何影响,只是尝试一下。

尝试 运行 bundle exec rake:test:clone,这会从当前开发模式重新创建测试数据库模式。