6

我正在测试 Minitest::Spec 作为 RSpec 的替代品,但我遇到了一个讨厌的问题,我无法完全找到答案:

我已经在spec/models/*_spec.rb. 我的 rails 应用程序包括minitest-rails,并且我将 rakefile 设置如下:

Rake::TestTask.new do |t|
  t.libs.push "lib"
  t.test_files = FileList['spec/**/*_spec.rb']
  t.verbose = true
end
task :default => :test

现在,如果我这样编写规范文件:

require 'minitest_helper'

describe User do
  ...
end

...然后运行rake test,我得到:

user_spec.rb:1:in `require': cannot load such file -- minitest_helper (LoadError)

但是,如果我将要求行更改为

require_relative '../minitest_helper'

然后它工作。所以,这是功能性的,但似乎我在网上找到的每个使用 minitest 规范的人的例子都只是调用require 'minitest_helper',而不是require_relative. 那么,我错过了什么让它对其他人有用但不适用于我的情况?

最后一条信息,我的帮助文件如下所示:

# spec/minitest_helper.rb
ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)

require "minitest/autorun"
require "minitest/rails"

# Uncomment if you want Capybara in accceptance/integration tests
# require "minitest/rails/capybara"

# Uncomment if you want awesome colorful output
# require "minitest/pride"

class MiniTest::Rails::ActiveSupport::TestCase
  # Add more helper methods to be used by all tests here...
end

没有什么花哨。谢谢您的帮助!

4

2 回答 2

8

您的测试没有找到帮助文件,因为您没有告诉您的测试查看它的位置。尝试将您的 rake 任务更改为:

Rake::TestTask.new do |t|
  t.libs << "lib"
  t.libs << "spec"
  t.test_files = FileList['spec/**/*_spec.rb']
  t.verbose = true
end
task :default => :test
于 2012-09-28T15:10:49.403 回答
2

在 Ruby 1.9 中,工作目录包含在 Ruby 加载路径中。如果需要,您可以添加它:

$: << "."

...或者您可以添加任何其他要从中获取requireRuby 文件的目录。

如果你看到其他人只写:

require 'minitest_helper'

...那么毫无疑问他们已经对他们的加载路径做了一些事情(或者 Rails/Rake 已经为他们做了)。您可以尝试p $:在 Rakefile 中查看 Rails/Rake 对加载路径(如果有的话)做了什么。

于 2012-09-23T17:10:35.173 回答