我有一堆Rails应用程序需要运行相同的rspec示例。这些规范是关于在整个组织内实施一致的约定。我熟悉Rspec的shared_example,但是AFAIK,它们只能在同一个应用程序中共享。
有没有办法在多个应用程序之间共享rspec。如果有帮助,所有应用程序共享一个Rails引擎。
答案 0 :(得分:1)
您需要使用 full_path 来要求共享文件(您可以使用ENV变量设置此路径):
require '/home/USERNAME/shared_examples/my_shared_specs.rb'
或
require ENV['SHARED_EXAMPLE_FILE_PATH']
在您的spec文件中添加它,您应该可以调用它。
如果要加载多个文件,请确保要求rspec rails_helper.rb
(spec_helper.rb
中的所有文件(如果您有旧版本))同时确保在文件之前加载它们使用它们(documentation)。
rails_helper.rb
...
Dir['/home/USERNAME/shared_examples/*.rb'].each { |file| require file }
...
或
...
Dir["#{ ENV['SHARED_EXAMPLES_PATH'] }*.rb"].each { |file| require file }
...
请确保将我用过的路径替换为您拥有的路径。
另一个更复杂的是使用共享示例创建一个gem,并再次在rails_helper.rb
中需要这些文件:
...
Dir["#{Bundler.load.specs.find{|s| s.name == <gem_name> }.full_gem_path}/shared_examples_path/*.rb"].each { |file| require file }
...
这可能是宝石中的一种方法。
答案 1 :(得分:0)
PHP Fatal error: Class 'Doctrine\Common\Inflector\Inflector' not found in /vendor/laravel/framework/src/Illuminate/Support/Pluralizer.php on line 78
[Symfony\Component\Debug\Exception\FatalErrorException]
Class 'Doctrine\Common\Inflector\Inflector' not found
)。需要宝石shared_specs
中的规范文件,然后在每个应用程序的lib/shared_spec.rb
中,在Gemfile
中添加gem 'shared_specs', require: false
和require 'shared_specs'
。但是,您希望在own gem server上发布gem。spec/shared_specs.rb
目录中。这需要熟悉SCM,并且流程可以be cumbersome。(每个选项都有一些假设,但是,我的SO分数太低,无法通过评论来澄清问题)。