- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为 Rails 3 项目编写简单的单元测试,但我无法实际执行任何测试。
举个例子,尝试运行 Rails 自动生成的测试失败:
require 'test_helper'
class UserTest < ActiveSupport::TestCase
# Replace this with your real tests.
test "the truth" do
assert true
end
end
导致以下错误:
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load --
test_helper (LoadError)
from <internal:lib/rubygems/custom_require>:29:in `require'
from user_test.rb:1:in `<main>'
注释掉 require 'test_helper' 行并尝试运行此错误中的测试结果:
user_test.rb:3:in `<main>': uninitialized constant Object::ActiveSupport (NameError)
Action 包 gem 似乎已正确安装并且是最新的:
actionmailer (3.0.3, 2.3.5)
actionpack (3.0.3, 2.3.5)
activemodel (3.0.3)
activerecord (3.0.3, 2.3.5)
activeresource (3.0.3, 2.3.5)
activesupport (3.0.3, 2.3.5)
Ruby 的版本为 1.9.2p0,Rails 的版本为 3.0.3。
我的测试目录的示例转储如下:
/fixtures
/functional
/integration
/performance
/unit
-- /helpers
-- user_helper_test.rb
-- user_test.rb
test_helper.rb
我以前从未见过这个问题 - 我已经运行了典型的 rake 任务来准备测试环境。我的应用程序或环境配置文件中没有任何异常,也没有安装任何会干扰测试环境的异常 gem。
编辑 3 月 9 日
Xavier Holt的建议,明确指定 test_helper 的路径有效;然而,这暴露了 ActiveSupport 的一个问题。
现在,当我尝试运行测试时,我收到以下错误消息(如上面所列):
user_test.rb:3:in `<main>': uninitialized constant Object::ActiveSupport (NameError)
但是正如您在上面看到的,Action Pack 已全部安装并更新到最新。
编辑 3 月 13 日
当尝试使用 rake test:units
运行测试时,以下堆栈跟踪将转储到控制台:
test/unit/bookmark_test.rb:3:in `<top (required)>': uninitialized constant Objec
t::ActiveSupport (NameError)
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `load'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `block in <main>'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `each'
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `<main>'
rake aborted!
因此,查看上面列出的文件,我看到以下内容:
#!/usr/bin/env ruby
# Load the test files from the command line.
ARGV.each { |f| load f unless f =~ /^-/ }
据我所知,一切看起来都符合预期。
最佳答案
您的 test/test_helper
文件应该在您生成应用程序时创建。它包含以下有值(value)的内容:
ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
#
# Note: You'll currently still have to declare fixtures explicitly in integration tests
# -- they do not yet inherit this setting
fixtures :all
# Add more helper methods to be used by all tests here...
end
这里的第二行是最重要的:它需要应用程序根目录下的 config/environment.rb
文件,而这又需要很多其他东西,包括有值(value)的(我就像今天这个词,好吗?)ActiveSupport
常量。
当您生成 Controller 、模型或脚手架时,它还会为它们生成测试。我刚刚在我的应用程序中运行 rails gscaffold Ticket
,它生成了 test/unit/ticket_test.rb
其中包含以下内容:
require 'test_helper'
class TicketTest < ActiveSupport::TestCase
# Replace this with your real tests.
test "the truth" do
assert true
end
end
该文件的第一行需要我们刚刚看到的 test/test_helper.rb
文件。这将加载 ActiveSupport 及其中的 TestCase 类,从而使此测试可行。其他一切都从那里开始。
有了所有这些解释(即使这是您已经知道的事情),我打赌它会大量破坏您的LOAD_PATH
,从而导致测试
要从中删除的目录。
真正不寻常的是,当您指定 test/test_helper.rb
的完整路径时,您是说它加载了它,但 ActiveSupport
仍然未定义。嗯,应该按照上面的描述加载。它实际上加载了 config/environment.rb 吗?您可以添加一些内容,例如:
puts "LOADING CONFIG/ENVIRONMENT.RB"
在 config/environment.rb
文件的顶部,然后再次运行测试?应该是输出的。非常不寻常。
继续讨论LOAD_PATH
...有一个肮脏的小 secret 没有告诉我们?
事实上,Dan Cheail 提出了一个很好的观点。您可以使用 ruby test/unit/ticket_test.rb
运行测试,在这种情况下 test_helper
将不可用,但这仍然不能解释为什么当您指定完整路径,您仍然会得到未定义的常量ActiveSupport
。
如果您想运行单个测试,您应该这样做:
ruby -Itest test/unit/ticket_test.rb
那里的 -I
选项将 test
目录添加到加载路径,这意味着 test_helper
文件将通过直接 可用>需要“test_helper”
。如果此后仍然出错,我认为您的 test/test_helper.rb
要么是空的,要么是损坏的。
关于unit-testing - 给定一个典型的 Rails 3 环境,为什么我无法执行任何测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5227081/
有什么方法可以使用常用工具(ffmpeg?mplayer/mencoder?mkvmerge?等)来查找关键帧在给定视频文件中出现的频率? {从而找到最小搜索大小?}这似乎是一个显而易见的统计数据,“
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 2 年前。 Improve
我正在阅读Intel的SSD产品specification。那里有一张桌子说 Latency (typical) read/write < 10 us 但是没有更多细节可以解释这个数字。有人知道“典型
出于好奇:典型的 Linux 发行版中最古老的代码/包是什么?电子书?海湾合作委员会? 最佳答案 Sun RPC 很老了,它在 C 库中: http://blogs.oracle.com/webmin
一个常见的假设是 1/x * x == 1。在符合 IEEE 754 标准的常见硬件上打破这个的最小正整数是多少? 当乘法逆的假设失败时,写得不好的有理算术就会停止工作。由于包括 C 和 C++ 在内
流行手机型号支持的典型触摸点数量是多少?我在基础研究中看到低至 2 和高至 5,但我希望能够将其映射到实际手机和更好的限制! 最佳答案 两部手机的触控点数据: Galaxy S 5 LG
我讨厌讨厌IE!既然我已经咆哮了,我确实需要一些帮助。我这里有这个网站。 http://pearsonlyle.uwpistol.net/galleries/susie-theodorou/edito
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
作为来自企业 IT 的 Node.js 初学者,我无法理解 Node.js 用法的某一方面。我将我的问题分为两部分。 问题 1) 严格从可扩展性的角度来看,I/O 密集型 Web 应用程序如何使用 N
我希望我的问题是合法的......我问这个问题是因为在阅读了许多博客,玩了许多示例应用程序和官方 API 1 周后,我仍然很困惑,从哪里开始编码...... 总的来说,就浏览器之间的系统架构而言 W
这是我的汽车类(class): public class Car { private int FGNr; private String name; private String type; priva
我认为我的问题标题清楚地表达了我需要的信息的本质。我用谷歌搜索了 where is the "applies to list" in vba excel以及其中的一些变体,都带有如图所示的引号,这应该
我是一名优秀的程序员,十分优秀!