6

我在将PaperTrail(Rails 对象的自动版本控制)与 RSpec 测试一起使用时遇到问题。通常我希望我的测试在没有 PaperTrail 版本控制的情况下运行,但是有一些测试我希望打开 PaperTrail。我通常使用 Guard 和 Spork 运行我的测试,我可以使用类似PaperTrail.enabled = truePaperTrail.enabled = false围绕给定测试的东西,并且一切正常。

但是,当我使用 RSpec 运行测试时,需要 PaperTrail 的测试失败。更具体地说,虽然before过滤器中的代码可以生成版本对象,但测试中的代码却不能。经过大量的挖掘、修补和尝试代码片段(我已经尝试过thisthis),看起来最好的解决方案是使用PaperTrail READMErequire "paper_trail/frameworks/rspec"中提到的行。

不幸的是,这些中的每一个都让我保持在我开始的地方——使用 Guard/Spork 测试通过,但没有通过 vanilla RSpec。这尤其是一个问题,因为当我在本地使用 Spork 时,我们的持续集成服务器直接运行 RSpec。

有没有人有任何见解?

4

2 回答 2

8

PaperTrail 现在有关于使用 vanilla rspec 进行测试的文档

https://github.com/paper-trail-gem/paper_trail#7b-rspec

包括require 'paper_trail/frameworks/rspec'在您的spec/rails_helpers.rb

... 默认情况下,所有测试都将关闭 PaperTrail。要为测试启用 PaperTrail,您可以将测试包装在一个with_versioning块中,或者将versioning: true选项传递给规范块。

于 2018-09-01T00:19:00.620 回答
2

不知何故,我的问题通过更改before(:all)after(:all)行为解决before(:each)after(:each)

于 2013-10-14T16:03:04.990 回答