我想知道如何在我的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>'
我在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
迁移。分贝。unknowm comman 't'
与一个特定应用的问题。编辑6 - db config
与默认值相比没有任何变化:https://gist.github.com/1006199
编辑7
rake db:test:prepare --trace
- &gt;什么都没有打破(但保持打印(first_time)
https://gist.github.com/1007340
使用RAILS_ENV="test"
耙,一切都很顺利。它写在测试日志上。
ruby -I test test/unit/category_test.rb
与rake
相同的错误,但没有写在dev上。或测试日志。
答案 0 :(得分:3)
一堆无序的答案:
“CREATE TABLE”语句通常意味着您的test_db是从头开始创建的(默认情况下,在测试任务之前,启动db:migrate)。你确定他们在dev_db上被调用了吗? 还检查你的config / database.yml,看是否有一些拼写错误(例如:为测试和开发环境使用相同的表)
看起来某些迁移文件中存在错误(错误记住了迁移中的阻止)。
“rake test”是默认任务,这就是为什么当你只是在没有参数的情况下启动“rake”时它就会运行。
编辑:
根据我在编辑中看到的内容,从5及以上,看起来你有一些环境文件的问题。所以试着仔细检查: * config / environments / test.rb * config / application.rb * config / environment.rb
如果使用RAILS_ENV =“test”,一切顺利,那么我几乎可以肯定你已经改变了应用中的一些默认行为(配置,env变量,任何特定的宝石?)
另外,在test / test_helper.rb中,在文件开头添加RAILS_ENV ='test',这会强制测试环境。
答案 1 :(得分:1)
我有同样的错误信息,除了我说:“test”:未知命令'i'(ArgumentError)。 “修复”或“解决方法”只是使用:
$> bundle exec rake test
而不是使用'rake test'