我正在尝试为我的应用程序设置我的单元测试,但是当我尝试运行任何单元测试时,当我在rubymine中运行测试时,我会得到以下错误:
ActiveRecord::StatementInvalid: Mysql2::Error: Table 'cms2_test.user_sessions' doesn't exist: DELETE FROM `user_sessions`
1 tests, 0 assertions, 0 failures, 1 errors
Test suite finished: 0.016993 seconds
这是我在控制台中尝试运行测试时遇到的错误:
ruby unit/user_test.rb
/Users/aldeirm2/Desktop/CMS2/config/boot.rb:1:in `require': no such file to load -- rubygems (LoadError)
from /Users/aldeirm2/Desktop/CMS2/config/boot.rb:1
from /Users/aldeirm2/Desktop/CMS2/config/application.rb:1:in `require'
from /Users/aldeirm2/Desktop/CMS2/config/application.rb:1
from /Users/aldeirm2/Desktop/CMS2/config/environment.rb:2:in `require'
from /Users/aldeirm2/Desktop/CMS2/config/environment.rb:2
from ./test_helper.rb:2:in `require'
from ./test_helper.rb:2
from unit/user_test.rb:1:in `require'
from unit
/user_test.rb:1
两个不同的错误!
我可以让我的单元测试工作的任何想法?
谢谢
p.s我使用authlogic进行验证,而不是我认为它与它有任何关系。
答案 0 :(得分:2)
ActiveRecord::StatementInvalid
记录似乎是一个过时的测试数据库。除非您运行完整的rake
而不是运行单个规范,否则您需要运行rake db:test:prepare
以更新测试环境中的数据库表。这基本上只是匹配开发数据库模式。
运行rake
时,您不需要这样做,它会在开始运行单个测试之前自动为您执行此操作。
答案 1 :(得分:0)
您可能无法直接运行单元测试,除非您已设置环境以支持它,因为有时Ruby解释器无法解析test_helper
的位置。运行它们的最可靠方法是rake test:units
,你可以看到为执行它而构造的命令行。
第一个错误可能与在模式中没有关联表的fixture文件有关,在这种情况下,这意味着您可能在test/fixtures/user_sessions.yml
中定义了user_sessions
但没有db/schema.rb
表。每次测试都会加载灯具,第一步是删除所有旧记录。