Ruby on rails 使用rake测试时出现的问题`
我想知道如何在rails应用程序中设置测试。当我运行Ruby on rails 使用rake测试时出现的问题`,ruby-on-rails,ruby,ruby-on-rails-3,unit-testing,rake,Ruby On Rails,Ruby,Ruby On Rails 3,Unit Testing,Rake,我想知道如何在rails应用程序中设置测试。当我运行rake测试时,首先奇怪的是,它针对我的开发数据库启动了一堆CREATE TABLE(哼..不喜欢这样..)。所以我启动了rake-test-RAILS\u-ENV=test,甚至尝试了bundle-exec-rake-test-RAILS\u-ENV=test。现在,CREATE TABLE针对我的测试数据库,但由于以下错误而全部失败: ** Execute test:units test/unit/category_test.rb:5:in
rake测试时,首先奇怪的是,它针对我的开发数据库启动了一堆CREATE TABLE
(哼..不喜欢这样..)。所以我启动了rake-test-RAILS\u-ENV=test
,甚至尝试了bundle-exec-rake-test-RAILS\u-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>'
**执行测试:单元
test/unit/category_test.rb:5:在'test'中:未知命令't'(ArgumentError)
来自test/unit/category_test.rb:5:in`'
我在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
需要“测试助手”
类CategoryTest
我使用Rails 3.0.7和基本配置
有什么想法吗
编辑
我开始发疯了,做了很多尝试,但似乎都不管用。当我用一些东西启动一个新的应用程序时,rake test
可以很好地工作,但是当我在当前的应用程序上尝试这个时,它总是针对我的dev.db启动,根本不工作。我试着编辑测试文件,还原它们,尝试用不同的方法删除/设置测试数据库,尝试不同的rake版本,比较我当前应用程序和另一个全新应用程序的许多方面。。。什么也没找到。。救命啊
编辑2
听起来很蹩脚,但是rake
与rake测试做相同的事情是正常的吗
编辑3
听起来很有可能,当我继续研究错误的地方时,我意识到每次我运行rake test
,它都是在开发环境中进行的,而不是在测试环境中(查看日志)。它在我的电脑OSX和我们的服务器FreeBSD上为所有Rails 3.0.7应用程序实现了这一点。您确定默认情况下,rake测试
应该在测试环境中工作吗
编辑4
请帮忙
编辑5-摘要
在我的电脑上或Rails 3.0.7中的服务器上使用不同的应用程序运行rake测试时,它会执行以下操作:
- 对dev.db运行
CREATE TABLE
和INSERT-INTO
迁移
- 不要清空dev.db
- 写入development.log而不是test.log
- 还有一个问题是,一个特定的应用程序出现了错误
unknowm comman't'
编辑6-db配置
默认设置尚未更改:
编辑7
rake db:test:prepare--trace
->无中断(但保持打印(第一次)
使用rake的RAILS\u ENV=“test”
一切正常。它会写入测试日志
ruby-I test/unit/category_test.rb
与rake
的错误相同,但没有写入开发或测试日志。一堆无序的答案:
- “createtable”语句通常意味着您的测试数据库是从头创建的(默认情况下,在启动测试任务之前,会启动db:migrate)。您确定在dev_数据库上调用了它们吗?
还要检查您的config/database.yml,看看是否有一些输入错误(例如:在测试和开发环境中使用相同的表)
- 您的某些迁移文件中似乎有错误(迁移中的“t”错误记忆块)
- “rake测试”是默认任务,这就是为什么当您只启动“rake”而不带参数时它会运行的原因
编辑:
根据我在编辑中看到的内容,从第5页和第5页以上的内容来看,您似乎对环境文件有一些问题。因此,请尝试再次检查:
*config/environments/test.rb
*config/application.rb
*config/environment.rb
如果使用RAILS_ENV=“test”,一切正常,那么我几乎可以肯定您已经更改了应用程序中的一些默认行为(配置、环境变量、任何特定的gem?)
另外,在test/test\u helper.rb中,在文件开头添加RAILS\u ENV='test',这将强制测试环境。我收到了相同的错误消息,只是对我说:在'test':未知命令'I'(ArgumentError)。
“修复”或“解决方法”只是简单地使用:
$> bundle exec rake test
不使用“rake test”您确定没有意外地在该测试的第5行上放置空格。错误消息是在文件test/unit/category_test.rb的第5行上有一个无法理解的命令“t”。如果意外地键入空格(如t est)或有一个额外的“t”,可能会发生这种情况在你的环境中肯定有一些奇怪的东西,因为rake test
通常知道它应该在“测试”环境中工作。我从来没有手动强制RAILS_ENV。你修改过任何东西吗?当你创建一个新的RAILS应用程序并仅仅创建相同的单一资源时,这个错误会重现吗?与你的q无关继续,但是当您刚刚开始测试时,为什么不试试RSpec呢?试着运行rake db:test:prepare--trace
并确保您的迁移是最新的(rake db:migrate)。你能自己运行测试文件吗?ruby-I test/unit/category_test.rb
听起来很有可能,当我继续研究问题的时候,我意识到每次运行rake test
,它都在开发环境中运行,而不是在测试环境中(查看日志)。它在我的计算机OSX和我们的服务器FreeBSD上为所有Rails 3.0.7应用程序执行此操作。你确定默认情况下,rake test
应该在测试环境下工作吗?你能粘贴你的config/database.yml文件吗?如果运行:Rails_ENV=“test”bundle exec rake test会发生什么情况?(注意,我在调用之前放置了Rails_ENV)。同时检查test/test_helper.rb。它的第一行应该是:ENV[“RAILS_ENV”]=“test”。对于我来说,t
和i
是测试字符串名称的第一个字母:test't...
,test'i..
。