Можете ли вы передать совпадение в общий пример в rspec? - PullRequest
0 голосов
/ 08 мая 2018

У меня следующая ситуация. У меня есть общий пример, который передается в некотором хеше как данные, а другой - с ожидаемыми данными. Упрощенно это выглядит так:

RSpec.describe "shared examples" do
  shared_examples "matching hash" do |data, expected_data|
    it 'matches' do
      expect(data).to include (expected_data)
    end
  end

  it_behaves_like "matching hash", { foo: '/foo/1', bar: '/bar' }, { foo: '/foo/1' }
end

Теперь у меня есть проблема, что для некоторых значений в хэше, содержащем URL, я не хочу проверять всю строку, а только начало. Таким образом, моя идея состояла в том, чтобы использовать устройство сравнения, как я обычно делаю, и передавать его внутри expected_data.

RSpec.describe "shared examples with passed in matcher" do
  shared_examples "matching hash" do |data, expected_data|
    it 'matches' do
      expect(data).to include (expected_data)
    end
  end

  it_behaves_like "matching hash", { foo: '/foo/1' }, { foo: start_with('/foo/') }
end

К сожалению, это не с

Failure/Error: it_behaves_like "matching hash", { foo: '/foo/1' }, { foo: start_with('/foo/') }
  `start_with` is not available on an example group (e.g. a `describe` or `context` block). It is only available from within individual examples (e.g. `it` blocks) or from constructs that run in the scope of an example (e.g. `before`, `let`, etc).

В этом конкретном случае я мог бы решить эту проблему, передав регулярное выражение вместо start_with, или адаптировать общий пример, чтобы явно получить нечеткие данные и сравнить их с помощью сопоставителя.

Но мне было бы лучше, если бы был способ передать совпадения в общих примерах. Есть ли способ сделать это или это просто невозможно?

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