gpt4 book ai didi

ruby-on-rails - RSpec 套件性能差异

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:47 24 4
gpt4 key购买 nike

在运行我们的规范套件时,我遇到了一个有趣的问题,它让我自己和我的团队非常头疼。

我们的规范套件分为以下子文件夹,旁边是它们完成的总执行时间:

rspec spec/acceptance    311.67s
rspec spec/controllers 18.97s
rspec spec/decorators 4.39s
rspec spec/helpers 9.45s
rspec spec/lib 16.88s
rspec spec/mailers 5.27s
rspec spec/models 121.05s
rspec spec/presenters 0.03s
rspec spec/workers 19.3s

Total run time: 8m 27s

当然可以改进,但总的来说还是很容易管理的。

但是,如果我运行 rspec spec 并立即运行整个套件,完成的总时间是 27m 11s!

因此,显然我们正在做的事情会显着影响同时运行的整个套件的性能。我希望我能得到一些关于我可以从哪里开始尝试解决此问题的指示。

如果有帮助,我已经发布了我的 spec_helper.rb 文件 here

提前致谢

最佳答案

我猜测,您的集成规范将 DatabaseCleaner 设置为 :truncation 并且它不会切换回 :transaction对于其他规范。我有一个示例 spec_helper 可以解决 here 的情况.还提供了几种方法,可帮助您深入了解并找出在任何给定时间使用的策略。这是为了您的方便:

def cleaner_strategy
active_record_cleaner.instance_variable_get(:@strategy).class
end

def active_record_cleaner
DatabaseCleaner.instance_variable_get(:@cleaners)[[:active_record, {}]]
end

旁注:我们对集成规范使用过滤器,因为它们太慢了。我们在本地环境中默认禁用它们,然后让 CI 运行它们。

config.filter_run_excluding :slow unless ENV['SLOW']

然后你可以单独运行它们:

$ SLOW=true rspec spec/features/some_awesome_feature_spec.rb

关于ruby-on-rails - RSpec 套件性能差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16445900/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com