Предупреждение об устаревании заглушки RSpec для метода заглушки другой библиотеки - PullRequest
1 голос
/ 18 апреля 2019

У меня есть спецификация, которая работает без проблем, за исключением случаев, когда я пытаюсь запустить отдельные блоки it. В этом случае я получаю Failure/Error: before(:context) с объяснением:

Использование двойных или частичных двойных кодов из rspec-mocks вне Жизненный цикл на тест не поддерживается. Использование stub из rspec-mocks ' старый :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 без включения старого синтаксиса rspec-mocks?


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 ]

1 голос
/ 19 апреля 2019

Мне кажется, проблема в том, что вы включили заглушку в блоке before(:each), а не в блоке before(:context), который выполняется перед блоком before(:each). На этом этапе метод stub из dry-container неизвестен rspec / ruby, и поэтому он пытается использовать метод stub по умолчанию из rspec-mock.

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 

Из документации по испытаниям сухих контейнеров

# before stub you need to enable stubs for specific container
container.enable_stubs!
container.stub(:redis, "Stubbed redis instance")
1 голос
/ 18 апреля 2019

Я нашел обходной путь сейчас, если я использую:

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' }

Это работает. Единственный недостаток, который я вижу, это то, что он будет стоить немного производительности и что он может сломаться в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...