Ruby on rails 如何防止RSpec在带有虚拟应用程序的Rails插件中两次运行规范?

Ruby on rails 如何防止RSpec在带有虚拟应用程序的Rails插件中两次运行规范?,ruby-on-rails,ruby,activerecord,rspec,Ruby On Rails,Ruby,Activerecord,Rspec,我正在写一个Rails扩展。为了测试它,我使用RSpec。为了制作用于测试插件的模型,我使用了一个预生成的虚拟应用程序: rails插件新yaffle--dummy path=spec/dummy--skip test--full 我有一些测试。当我打电话给他们时,他们跑了两次 #我在应用程序中总共进行了4次测试 >rspec >8个示例,0个失败 >rspec规范/yaffle/active_记录/acts_as_yaffle_规范.rb >4个示例,0个失败 >rspec规范/yaffle

我正在写一个Rails扩展。为了测试它,我使用RSpec。为了制作用于测试插件的模型,我使用了一个预生成的虚拟应用程序:

rails插件新yaffle--dummy path=spec/dummy--skip test--full
我有一些测试。当我打电话给他们时,他们跑了两次

#我在应用程序中总共进行了4次测试
>rspec
>8个示例,0个失败
>rspec规范/yaffle/active_记录/acts_as_yaffle_规范.rb
>4个示例,0个失败
>rspec规范/yaffle/active记录/acts作为规范rb:4
>2个示例,0个失败
以下是我的文件的外观:

#lib/yaffle.rb
Gem.find_文件('yaffle/***.rb')。每个{路径|需要路径}
模块Yaffle
#你的密码在这里。。。
结束
#spec/spec_helper.rb
环境[“RAILS_ENV”]| |=“测试”
需要文件。展开\u路径(“../dummy/config/environment”,\u文件\u)
RSpec.configure do | config|
config.example_status_persistence_file_path='.rspec_status'
config.disable\u monkey\u补丁!
结束
#spec/dummy/config/environment.rb
#加载Rails应用程序。
需要相对的“应用程序”
#初始化Rails应用程序。
Rails.application.initialize!
#spec/yaffle/active_record/act_as_yaffle_spec.rb
需要“规格帮助器”
RSpec.description“扮演亚夫勒”做什么
def测试\u hickwalls\u yaffle\u text\u field\u应该是\u last\u squawk
断言等于“last_squawk”,Hickwall.yaffle_text_字段
结束
def test_a_wickwalls_yaffle_text_field_should_last_tweet
断言等于“最后一条推”,Wickwall.yaffle\u文本\u字段
结束
结束
#spec/dummy/config/application.rb
需要相对“启动”
需要“rails/all”
Bundler.require(*Rails.groups)
需要“yaffle”
模块虚拟
类应用程序
另外,我注意到只有
需要“spec\u helper”
的文件才会被复制

那么,我做错了什么?如果是bug,如何解决它?

原因 这是由这条线引起的:

Gem.find_文件('yaffle/***.rb')。每个{路径|需要路径}
显然,
Gem.find_files
获取Gem目录中与该模式匹配的所有文件,而不仅仅是相对于Gem root的文件。因此,
yaffle/***.rb
表示
/lib/yaffle/..
/spec/lib/yaffle/..
中的两个文件

修理 我通过明确要求所有文件来修复它:

要求“lib/yaffle/active\u record/act\u as\u yaffle”
需要“lib/yaffle/active\u record/has\u跳蚤”
也可以只需要该目录中的所有文件:

Dir[“lib/yaffle/active_record/***.rb”]。每个{文件|需要文件}
我会使用而不是急切地用
Gem.find_文件加载所有内容。