RSpec存根弃用警告另一个库的存根方法

时间:2019-04-17 22:32:50

标签: ruby-on-rails ruby unit-testing rspec

除了运行单个it块时,我的规范运行没有问题。在这种情况下,我得到一个Failure/Error: before(:context)的解释:

  

使用rspec-mocks之外的双打或部分双打   不支持每次测试生命周期。从rspec-mocks使用stub   未明确启用语法的旧:should语法是   不推荐使用。使用新的:expect语法或显式启用   改为:should

问题是我不使用rspec-mocks stub方法,而是使用dry-container定义的方法:

像这样:

require 'dry/container/stub'

before { FooContainer.enable_stubs! }

before(:context) { FooContainer.stub 'foo.key', stubbed_operation }

after(:context) { FooContainer.unstub 'foo.key' }

是否可以在不启用旧的rspec-mocks语法的情况下禁用此RSpec行为?


rspec --version
RSpec 3.8
  - rspec-core 3.8.0
  - rspec-expectations 3.8.2
  - rspec-mocks 3.8.0
  - rspec-rails 3.8.2
  - rspec-support 3.8.0


rails -v
Rails 5.2.2.1

ruby -v
ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux]

dry-container (0.6.0)

2 个答案:

答案 0 :(得分:1)

如果使用,我现在找到了一种解决方法:

before { FooContainer.stub 'foo.key', stubbed_operation }

after { FooContainer.unstub 'foo.key' }

代替:

before(:context) { FooContainer.stub 'foo.key', stubbed_operation }

after(:context) { FooContainer.unstub 'foo.key' }

有效。我看到的唯一缺点是,它会降低性能,并且将来可能会失效。

答案 1 :(得分:1)

我认为问题在于,您在before(:each)块中而不是before(:context)块中执行了before(:each)块中的存根。此时,rspec / ruby​​未知stub的{​​{1}}方法,因此它尝试使用dry-container中的默认stub方法。

rspec-mock

dry-container testing documentation

require 'dry/container/stub'

before(:context) { FooContainer.enable_stubs! }
before(:context) { FooContainer.stub 'foo.key', stubbed_operation }

# or better
before(:context) do
  FooContainer.enable_stubs!
  FooContainer.stub 'foo.key', stubbed_operation
end

after(:context) { FooContainer.unstub 'foo.key' }

context "my context" do
  it "my test" do
    ...
  end
end