Rails 3:单元测试无法运行?

时间:2011-05-04 00:23:22

标签: ruby-on-rails ruby-on-rails-3

我正在尝试为我的应用程序设置我的单元测试,但是当我尝试运行任何单元测试时,当我在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进行验证,而不是我认为它与它有任何关系。

2 个答案:

答案 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表。每次测试都会加载灯具,第一步是删除所有旧记录。