Rspec 我可以运行Rails引擎吗';安装它的真实应用程序的s规格?

Rspec 我可以运行Rails引擎吗';安装它的真实应用程序的s规格?,rspec,rails-engines,ruby-on-rails,gem,ruby-on-rails-3.2,Rspec,Rails Engines,Ruby On Rails,Gem,Ruby On Rails 3.2,我有一个Rails引擎,旨在为我们更大的项目提供一些模型和控制器。引擎有一套相当不错的规格,在引擎的虚拟应用程序中使用了一堆模拟和一些全尺寸模型和控制器,以确保引擎正在做它应该做的事情,并与更大的应用程序一起工作 然而,即使所有测试都通过了,当我在更大的应用程序中更新引擎时,我也经常发现行为不正常。如果我的测试通过了,但是行为被破坏了,很明显测试出了问题,但是什么呢?我嘲弄得太多了,还是不够 为了让我更清楚地了解这一点,我希望能够从完整的应用程序内部运行引擎的测试。这似乎应该是可能的,但我对rs

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

然而,即使所有测试都通过了,当我在更大的应用程序中更新引擎时,我也经常发现行为不正常。如果我的测试通过了,但是行为被破坏了,很明显测试出了问题,但是什么呢?我嘲弄得太多了,还是不够

为了让我更清楚地了解这一点,我希望能够从完整的应用程序内部运行引擎的测试。这似乎应该是可能的,但我对rspec的理解还不够透彻,无法弄清楚它是如何实现的


(这与此相关,但并不完全相同;我并不是试图从一个命令运行所有规范,只是为了在完整的应用程序环境中运行引擎的规范。这似乎也是相关的。事实上,我已经阅读了每一个同时标记了这两个规范的问题,而且——数量不多——它们要么都不是我需要的,要么都没有答案。)最简单的解决方案是在rspec命令中指定路径。如果你有目录结构

/project
/engine
/engine_2
那么你应该运行所有的规格

cd project
rspec spec/ ../engine/spec ../engine_2/spec
但是,如果您想在持续集成上运行spec,或者这看起来不太舒服,我使用定制的rake spec任务解决了这个问题,更改了模式方法

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
需要“rspec/core/rake_任务”
RSpec::Core::RakeTask.new(:spec)
任务:默认=>:规范
RSpec::Core::RakeTask.module_eval do
def模式
额外费用=[]
Rails.application.config.rspec_path.each do| dir|
if File.directory?(dir)

在任何情况下,“它对我有效,我对此感到高兴”都是一个完美的答案!在本例中,我可以从提供路径开始,因此
bundle exec rspec`bundle show engine\u name`/spec
正如您的回答所示,效果很好。我无法将其用于我的应用程序/引擎设置。发动机规格从未运行过。你能提供一个更详细的要点吗?为#
获取未定义的方法“rspec_路径”,即使我的应用程序中设置了
rspec_路径。rb:
config.rspec_路径=[File.join(config.root),'spec']
class Engine < ::Rails::Engine
  # Register path to rspec
  config.rspec_paths << self.root
end