【问题标题】:Problem using `rake test`使用“耙子测试”的问题
【发布时间】: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

听起来很蹩脚,但rakerake test 做同样的事情是否正常?

编辑 3

听起来很可能,虽然我继续努力解决问题,但我意识到每次运行 rake test 时,它都会在开发环境而不是测试环境中进行处理(查看日志)。它在我的计算机 OSX 和我们的服务器 FreeBSD 上为所有 Rails 3.0.7 应用程序执行此操作。您确定rake test 应该默认在测试环境中工作吗?

编辑 4

请帮忙!

编辑 5 - 摘要

当在我的计算机上或在 Rails 3.0.7 的服务器上使用不同的应用程序运行 rake test 时,它会执行以下操作:

  • 针对开发者运行 CREATE TABLEINSERT 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.rbrake 相同的错误,但没有写在开发上。或测试日志。

【问题讨论】:

  • 你确定你没有不小心在这个测试的第 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


【解决方案1】:

一堆无序的答案:

  • “CREATE TABLE”语句通常意味着您的 test_db 是从头开始创建的(默认情况下,在测试任务之前,会启动 db:migrate)。你确定他们在dev_db上被调用吗? 还要检查您的 config/database.yml 以查看是否有一些拼写错误(例如:在测试和开发环境中使用同一张表)

  • 您的某些迁移文件中似乎存在错误(“错误”记住了迁移中的块)。

  • “rake test”是默认任务,这就是为什么当你不带参数启动“rake”时它会运行。

编辑:

根据我在 5 及以上版本中看到的编辑内容,您的环境文件似乎存在一些问题。所以尝试仔细检查: * 配置/环境/test.rb * 配置/应用程序.rb * 配置/环境.rb

如果使用 RAILS_ENV="test",一切正常,那么我几乎可以肯定您已经更改了应用中的一些默认行为(配置、环境变量、任何特定的 gem?)

另外,在您的 test/test_helper.rb 中,在文件开头添加 RAILS_ENV='test',这应该强制测试环境。

【讨论】:

  • 听起来很可能,当我继续解决问题时,我意识到每次我运行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"
【解决方案2】:

我收到了同样的错误消息,除了对我说:in `test': unknown command 'i' (ArgumentError)。 “修复”或“解决方法”是简单地使用:

$> bundle exec rake test

而不是使用'rake test'

【讨论】:

  • 对我来说,ti 是测试字符串名称的第一个字母:test 't...'test 'i...'
猜你喜欢
  • 2011-11-19
  • 1970-01-01
  • 2013-04-09
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多