如何解决可以在Rails加载之前进行测试吗?
我正在创建一个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
解决方法
容易。只需为您的测试设置一个不加载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环境变量禁用弹簧。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。