RSpe c: функция «ожидать с» вызывается из неправильного модуля при использовании с fastlane - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу использовать RSpe c вместе с fastlane и выполнил настройку, предложенную RSpe c. Я хочу проверить в своих тестах, вызывается ли функция с правильными параметрами. Я использовал приведенный здесь пример кода для проверки именно этого: https://relishapp.com/rspec/rspec-mocks/v/3-2/docs/setting-constraints/matching-arguments

require 'spec_helper'
require 'rspec'

RSpec.describe "Constraining a message expectation using with" do
  let(:dbl) { double }
  before { expect(dbl).to receive(:foo).with(1, anything, /bar/) }


  it "passes when the args match" do
    dbl.foo(1, nil, "barn")
  end

  it "fails when the args do not match" do
    dbl.foo(1, nil, "other")
  end
end

Когда я выполняю это с помощью 'rspe c', это нормально. Нет ошибок и я получаю ожидаемый результат.

Однако, если я загружаю действия fastlane в мой файл spec_helper.rb, как этот

$LOAD_PATH.unshift File.expand_path('..', __dir__)

module SpecHelper
end

require 'fastlane'

Fastlane.load_actions
Fastlane.plugin_manager.load_plugins

Я внезапно получаю следующую ошибку:

Constraining a message expectation using with passes when the args match
 Failure/Error: before { expect(dbl).to receive(:foo).with(1, anything, /bar/) }

 ArgumentError:
   wrong number of arguments (given 3, expected 0..1)
 # /Users/philip.otto/.rvm/gems/ruby-2.6.0/gems/facets-3.1.0/lib/core/facets/kernel/with.rb:15:in `with'
 # ./spec/iz_create_release_branch_spec.rb:8:in `block (2 levels) in <top (required)>'

Таким образом, проблема кажется чтобы неправильная функция 'with' была взята из другого модуля в facets / kernel / with.rb, а не из файлов rspec_mocks.

Как я могу убедиться, что вызывается правильная функция? Почему эта неправильная функция вызывается в первую очередь?

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 21 февраля 2020

Оказалось, что проблема не в fastlane, а в зависимости, которую мы добавляем в наш проект. Зависимость называется facets и включает в себя файл , который глобально переопределяет каждую функцию с именем с помощью .

Я сообщил об этом на их GitHub, и я сейчас жду их ответа. Ссылка на отчет

...