我想知道如何在rails应用程序中设置测试。当我运行rake test
时,第一件奇怪的事是,它在我的dev.数据库中启动了一堆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>'
我在Rails3中使用了基本的生成器,没有做任何更改。所以我在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
工作得很好,但当我在当前应用程序上尝试时,它总是针对我的dev.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
时,它会执行以下操作:
- 针对dev.db运行
CREATE TABLE
和INSERT INTO
迁移 - 不要清空dev.db
- development.log被写入而不是test.log
- 也是一个特定应用程序的错误CCD_ 14的问题
编辑6-数据库配置
与默认设置相比没有任何变化:https://gist.github.com/1006199
编辑7
rake db:test:prepare --trace
->没有中断(但继续打印(第一次)https://gist.github.com/1007340
有了RAILS_ENV="test"
作为rake,一切都很顺利。它写在测试日志上。
ruby -I test test/unit/category_test.rb
与rake
的错误相同,但在开发或测试日志上没有写入。
一堆无序的答案:
-
"CREATE TABLE"语句通常意味着您的testdb是从头开始创建的(默认情况下,在测试任务之前,会启动db:migrate)。你确定他们是在devdb上调用的吗?还要检查您的config/database.yml,看看是否有一些拼写错误(例如:对测试和开发环境使用相同的表)
-
看起来您的一些迁移文件中有一个错误(迁移中的t错误记忆块)。
-
"rake测试"是默认任务,这就是为什么在不带参数的情况下启动"rake"时会运行它。
编辑:
根据我在编辑中看到的,从5到更高版本,看起来你对环境文件有一些问题。所以试着仔细检查:*config/environments/test.rb*config/application.rb*config/enenvironment.rb
如果使用RAILS_ENV="test",一切都很好,那么我几乎可以肯定你已经更改了应用程序中的一些默认行为(配置、环境变量、任何特定的gem?)
此外,在test/test_help.rb中,在文件的开头添加RAILS_ENV='test',这将强制测试环境。
我收到了同样的错误消息,只是对我说:在"test"中:未知命令"I"(ArgumentError)。"修复"或"解决方法"只是简单地使用:
$> bundle exec rake test
而不是使用"rake test"