可以在Rails加载之前进行测试吗?

时间:2020-09-02 12:09:41

标签: ruby-on-rails ruby rspec minitest

我正在创建一个gem,而这个gem取决于Rails的加载。我需要在未加载Rails时创建一个方案。我在gem中以以下代码为例:

if defined?(Rails) && Rails.application
 #some code
end

我试图创建一个存根,但是当我们将其设置为nil时,Rails似乎会重新启动应用程序方法。 https://github.com/rails/rails/blob/fbe2433be6e052a1acac63c7faf287c52ed3c5ba/railties/lib/rails.rb#L38

Rails.stub(:application, nil) do
 # test
end

1 个答案:

答案 0 :(得分:0)

容易。只需为您的测试设置一个不加载Rails的引导程序文件即可。

# spec/barebones_helper.rb
RSpec.configure do |config|

end

# optionally load your dependencies:
# Bundler.require(:some_group)
# spec/lib/mygem_spec.rb
require 'barebones_helper'

实际上rspec-rails已经生成了两个单独的文件*:

  • spec_helper.rb-只需配置rspec。
  • rails_helper.rb需要spec_helper.rb,然后通过require File.expand_path('../config/environment', __dir__)引导Rails。

require 'rails_helper'更改为require 'spec_helper'会改变测试,使其在Rails之外执行。

但是请注意,通过Spring运行测试会产生奇怪的结果,因为它将使Rails在后台运行。如果您使用的是弹簧垃圾桶,则可以使用DISABLE_SPRING环境变量禁用弹簧。