【发布时间】:2011-09-06 04:34:49
【问题描述】:
我想知道如何在我的 Rails 应用程序中设置测试。当我运行rake test 时,首先奇怪的是,它会针对我的开发人员启动一堆CREATE TABLE。数据库(嗯..不喜欢这个..)。所以我启动rake test RAILS_ENV=test,我什至尝试bundle exec rake test RAILS_ENV=test。现在,CREATE TABLE 与我的测试数据库相冲突,但都因此错误而失败:
** Execute test:units
test/unit/category_test.rb:5:in `test': unknown command 't' (ArgumentError)
from test/unit/category_test.rb:5:in `<class:CategoryTest>'
我在 Rails 3 中使用了基本的生成器并且没有改变任何东西。所以我在 caterogy_test.rb 中有这个:
require 'test_helper'
class CategoryTest < ActiveSupport::TestCase
# Replace this with your real tests.
test "the truth" do
assert true
end
end
我使用 Rails 3.0.7 和基本配置。
有什么想法吗?
编辑
我快疯了,尝试了很多次,但似乎都不管用。当我用一些东西启动一个新应用程序时,rake test 工作正常,但是当我在我当前的应用程序上尝试这个时,它总是针对我的开发人员启动。 db 并且根本不工作。我尝试编辑测试文件,将它们恢复,尝试用不同的方式删除/设置测试数据库,尝试不同的 rake 版本,一方面比较我当前应用程序的很多东西,另一方面比较一个全新的应用程序。 .. 什么也没找到.. 救命!
编辑 2
听起来很蹩脚,但rake 与rake test 做同样的事情是否正常?
编辑 3
听起来很可能,虽然我继续努力解决问题,但我意识到每次运行 rake test 时,它都会在开发环境而不是测试环境中进行处理(查看日志)。它在我的计算机 OSX 和我们的服务器 FreeBSD 上为所有 Rails 3.0.7 应用程序执行此操作。您确定rake test 应该默认在测试环境中工作吗?
编辑 4
请帮忙!
编辑 5 - 摘要
当在我的计算机上或在 Rails 3.0.7 的服务器上使用不同的应用程序运行 rake test 时,它会执行以下操作:
- 针对开发者运行
CREATE TABLE和INSERT INTO迁移。分贝。 - 不要清空开发者。分贝。
- development.log 不是 test.log 写入的
- 还有一个特定应用出现错误
unknowm comman 't'的问题。
编辑 6 - 数据库配置
与默认设置没有任何变化:https://gist.github.com/1006199
编辑 7
rake db:test:prepare --trace -> 没有中断(但继续打印(first_time)
https://gist.github.com/1007340
RAILS_ENV="test" 用于 rake,一切顺利。它写在测试日志上。
ruby -I test test/unit/category_test.rb 与rake 相同的错误,但没有写在开发上。或测试日志。
【问题讨论】:
-
你确定你没有不小心在这个测试的第 5 行放了一个空格。错误消息是在文件 test/unit/category_test.rb 的第 5 行有一个无法理解的命令“t”。如果您不小心输入了一个空格(如 t est)或在该行中有一个额外的“t”,则可能会发生这种情况
-
您的环境中一定有一些奇怪的东西,因为
rake test通常知道它应该在“测试”环境中工作。我从来不需要手动强制 RAILS_ENV。你有修改什么吗?当您创建一个新的 Rails 应用程序并只创建相同的单一资源时,是否会重现此错误? -
与您的问题无关,但是当您刚刚开始进行测试时,为什么不尝试一下 RSpec?
-
尝试运行
rake db:test:prepare --trace并确保您的迁移是最新的 (rake db:migrate)。 -
你可以自己运行测试文件吗?
ruby -I test test/unit/category_test.rb
标签: ruby-on-rails ruby ruby-on-rails-3 unit-testing rake