ruby-on-rails – 我可以从安装它的真实应用程序运行Rails引擎的规范吗?

我有一个Rails引擎,旨在为我们的大型项目提供一些模型和控制器.引擎的规格相当不错,在引擎的虚拟应用程序中使用了一堆模拟和一些全尺寸模型和控制器,以确保引擎正在做它应该做的事情并使用更大的应用程序.

但是,即使所有测试都通过,我也经常在更大的应用程序中更新引擎时发现损坏的行为.如果我的测试通过但是行为被破坏了,那么测试显然有些问题,但是什么呢?我嘲笑太多,还是不够?

为了让我更接近解决这个问题,我希望能够在整个应用程序中运行引擎的测试.这似乎应该是可能的,但我不完全了解rspec如何处理.

(这与this question相关但不完全相同;我不是试图从一个命令运行所有规范,只是为了在完整的应用程序环境中运行引擎的规格.This似乎也是相关的.实际上,我已经阅读用rspecrails-engines标记的每一个问题 – 没有多少 – 而且它们都不是我需要的,或者没有答案.)

解决方法

最简单的解决方案是在rspec命令中指定路径.如果你有目录结构
/project
/engine
/engine_2

那你就做了,应该运行所有的规格

cd project
rspec spec/ ../engine/spec ../engine_2/spec

但是如果你想在Continous Integration上运行规范或者这似乎不太舒服我用自定义rake规范任务解决了这个问题,改变了模式方法.

lib / task / rspec.rake应如下所示

require "rspec/core/rake_task"

RSpec::Core::RakeTask.new(:spec)

task :default => :spec
RSpec::Core::RakeTask.module_eval do
  def pattern
    extras = []
    Rails.application.config.rspec_paths.each do |dir|
      if File.directory?( dir )
        extras << File.join( dir,'spec','**','*_spec.rb' ).to_s
      end
    end
    [@pattern] | extras
  end
end

在引擎类中,添加config.rspec_paths的路径

class Engine < ::Rails::Engine
  # Register path to rspec
  config.rspec_paths << self.root
end

并且不要忘记在基础项目中的某处初始化config.rspec_paths.

如果你想添加工厂然后你可以创建初始化程序,你可以在stackoverflow上找到解决方案.

不确定这个解决方案是否最好,但对我有用,我很满意.祝好运!

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...