0

我试图要求新的(即不是与 ruby​​ 捆绑的)版本的test/unit. 按照说明我用gem i test-unit. 但是现在当我需要时,test/unit我似乎需要旧版本。例如,我没有方法Test::Unit.at_start。即使我明确要求新test/unit安装的完整路径也会发生这种情况。

我有什么办法可以调查正在加载哪些符号以及为什么?

4

1 回答 1

3

由于 Ruby 带有一个实现test/unit(它实际上是一个 Minitest 兼容性包装器)调用require 'test/unit'将加载该版本,因为它已经在加载路径上。调用require '/absolute/path/to/test/unit'将加载新文件,但是当该文件调用时,例如require 'test/unit/testcase,它将从 stdlib 加载文件,从而导致混合类(所以不要这样做)。

您需要做的是使用之前的gem方法require激活 gem 。这将确保 gem lib 路径位于stdlib之前require的加载路径上,因此将首先找到这些文件。

gem 'test-unit'     # You can also pass a specific version as a second
                    # argument to `gem` if you want.

require 'test/unit' # This will find the gem version.

# Now the gem version will be loaded.
于 2014-06-02T21:49:36.613 回答