Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在多个应用程序之间共享rspec示例?_Ruby On Rails_Ruby_Rspec_Dry - Fatal编程技术网

Ruby on rails 如何在多个应用程序之间共享rspec示例?

Ruby on rails 如何在多个应用程序之间共享rspec示例?,ruby-on-rails,ruby,rspec,dry,Ruby On Rails,Ruby,Rspec,Dry,我有很多Rails应用程序需要运行相同的rspec示例。这些规范是关于在整个组织中强制执行一致的约定。我熟悉Rspec的shared_示例,但好吧,它们只能在同一个应用程序中共享 是否有一种跨多个应用程序共享rspec的方法。如果有帮助的话,所有应用程序都共享一个Rails引擎。IMHO,我认为RSpec不支持这一点。但这可以像跨项目共享代码的问题一样处理。所以,如果你已经在你的组织中这样做了,我会坚持这个解决方案,保持一致。否则,您可以尝试: 使用规范创建gem(例如共享规范)。需要gem的l

我有很多Rails应用程序需要运行相同的rspec示例。这些规范是关于在整个组织中强制执行一致的约定。我熟悉Rspec的shared_示例,但好吧,它们只能在同一个应用程序中共享


是否有一种跨多个应用程序共享rspec的方法。如果有帮助的话,所有应用程序都共享一个Rails引擎。

IMHO,我认为RSpec不支持这一点。但这可以像跨项目共享代码的问题一样处理。所以,如果你已经在你的组织中这样做了,我会坚持这个解决方案,保持一致。否则,您可以尝试:

  • 使用规范创建gem(例如
    共享规范
    )。需要gem的
    lib/shared\u spec.rb中的spec文件
    然后,在每个应用程序的
    gem文件
    中,添加
    gem的“shared\u specs”,Require:false
    需要
    spec/shared\u specs.rb中的“shared\u specs”
    。但是,您希望在您的网站上发布gem
  • 使用SCM(,)子模块将规范从单独的存储库拉入主存储库的
    spec
    目录。这需要熟悉SCM和流程
  • 上述解决方案减少了重复,但增加了维护开销——它们需要额外的基础设施,而规范中的更新意味着更新每个应用程序。根据上下文(不同速度的分布式团队、规格要求基本相似但略有不同的应用程序、少量应用程序、不经常的规格更改),简单地复制和粘贴带有规格的文件也可以

  • (每个选项都有一定的假设,但是,我的SO分数太低,无法通过评论提出澄清问题)。

    您需要使用完整路径要求共享文件(您可以使用ENV变量设置此路径):

    将其添加到spec文件中,您应该能够调用它

    如果要加载多个文件,请确保需要rspec
    rails\u helper.rb
    spec\u helper.rb
    ,如果您有旧版本)中的所有文件,并且确保在使用它们的文件之前加载它们()

    rails\u helper.rb

    ...
    Dir['/home/USERNAME/shared_examples/*.rb'].each { |file| require file }
    ...
    

    确保你将我使用的路径替换为你拥有的路径

    另一个稍微复杂一点的方法是创建一个只包含共享示例的gem,并且在
    rails\u helper.rb中需要以下文件:

    ...
    Dir["#{Bundler.load.specs.find{|s| s.name == <gem_name> }.full_gem_path}/shared_examples_path/*.rb"].each { |file| require file }
    ...
    
    。。。
    Dir[“#{Bundler.load.specs.find{s|s.name=}.full|gem_path}/shared_examples_path/*.rb”]。每个{124;文件|需要文件}
    ...
    

    这可能是gem中的一种方法。

    这是一个好问题,但看起来很难,我没有研究任何解决方案,也许你应该自己为ruby包装器创建新的解决方案
    ...
    Dir['/home/USERNAME/shared_examples/*.rb'].each { |file| require file }
    ...
    
    ...
    Dir["#{ ENV['SHARED_EXAMPLES_PATH'] }*.rb"].each { |file| require file }
    ...
    
    ...
    Dir["#{Bundler.load.specs.find{|s| s.name == <gem_name> }.full_gem_path}/shared_examples_path/*.rb"].each { |file| require file }
    ...