我在Rails中开发了一些工作正常的测试。然后我补充道:
我在测试文件中添加了密码和password_confirmation进行设置:
def setup
@user = User.new(email: "user@example.com",
username: "example user",
firstname: "Allan",
location: "Europe",
password: "foobar",
password_confirmation: "foobar")
end
现在,当我运行rake test
时,我收到错误消息:
NoMethodError: undefined method 'password_digest=' for #<User:0x00000002f9c020> test/models/user_test.rb:6:in 'setup'.
第6行是指@ user = User.new ...
行所以它似乎已正确实现了gem和其他列,但我收到此错误消息。有没有人知道可能是什么原因?
答案 0 :(得分:1)
您似乎已修改并重新运行现有迁移。在这种情况下,您的测试数据库与您的开发数据库不同步。您需要使用以下命令将架构加载到测试数据库中:
rake db:test:prepare
说明:
在rails开发中,您有两个完全独立的环境 - 测试和开发。开发是您用来查看所写内容的环境 - 它是rails s
和rails c
的默认设置。测试环境仅用于测试。这些环境有两个独立的数据库。
直到最近,每次创建迁移时,都必须运行两次,每个环境运行一次(因此两个数据库都处于同步状态)或者至少加载数据库模式以测试数据库。最新的rails版本稍微聪明一点 - 在运行测试之前,它将检查是否已运行所有迁移,然后测试数据库的版本是否与dev数据库匹配。如果没有,它将从架构更新测试数据库。
由于您重新运行现有迁移,因此两个数据库都生成相同的版本,因此您的测试数据库尚未自动更新,因此需要手动更新。