加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

为什么RSpec在从ruby内部运行时运行规范两次并重新加载spec文件

发布时间:2020-12-17 02:04:13 所属栏目:百科 来源:网络整理
导读:我正在尝试在现有的 ruby运行时中使用RSpec,并在每次文件更改时运行规范.这是因为J Ruby和JVM启动时间.为了在每次运行时消除这种情况,我想启动ruby一次,然后只重新加载更改的文件并运行规范.我正在使用防护(具有不同的扩展)和监视器,但似乎都遇到了下面描述
我正在尝试在现有的 ruby运行时中使用RSpec,并在每次文件更改时运行规范.这是因为J Ruby和JVM启动时间.为了在每次运行时消除这种情况,我想启动ruby一次,然后只重新加载更改的文件并运行规范.我正在使用防护(具有不同的扩展)和监视器,但似乎都遇到了下面描述的问题.

我将问题解决了RSpec本身.问题是,当通过RSpec :: Core :: Runner.run运行RSpec几次时它工作正常,直到使用load重新加载spec文件.然后RSpecs开始运行两次规格.
我已创建示例项目,显示此问题:https://github.com/mostr/rspec_double_run_issue

以下是示例输出:

ruby run_spec_in_loop.rb 
Running spec from within ruby runtime
.
Finished in 0.00047 seconds
1 example,0 failures

loading spec file via 'load' as if it was changed and we wanted changes to be picked up
Running spec from within ruby runtime
..
Finished in 0.001 seconds
2 examples,0 failures

有没有办法告诉RSpec在从现有ruby运行时内部运行时清除其后续运行之间的上下文?我还提出了这个问题作为RSpec Core项目的#826问题.

解决方法

总结这里的答案,以便从“未答复”过滤器中删除此问题…

根据RJHunter的观察,GitHub RSpec核心项目的解释已在此处记录:

https://github.com/rspec/rspec-core/issues/826#issuecomment-15089030

对于后代(如果以上链接死亡),以下是详细信息:

The RSpec runner is already calling load internally,your second load is what’s causing the double run issue.

I quickly knocked up a script based off your example which reruns a single spec file,changes the specs to something else,then reruns them,work’s correctly without the second load

See: 07002

上述要点包含:

require 'rspec'

spec_file = 'spec/sample_spec.rb'

File.open(spec_file,'w') { |file| file.write 'describe { specify { expect(true).to eq false } }' }

1.upto(5) do |i|
  puts "Running spec from within ruby runtime"
  ::RSpec::Core::Runner.run([spec_file],STDERR,STDOUT)

  #rewriting the spec file
  File.open(spec_file,'w') { |file| file.write "describe { specify { expect(#{i}).to eq false } }" }

end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读