Использование модуля Helpers для объявления контекстов в Rspec - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь рекурсивно объявить контексты в Rspec из модуля Helpers.

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

Минимальный полный пример:

module Helpers
  def context_bar
    context "bar" do
      it "baz" do
        expect(true).to be true
      end
    end
  end
end

include Helpers

describe "foo" do
  Helpers.context_bar
end

Если я сейчас выполню этот код в Rspec, то произойдет сбой:

RuntimeError:
  Creating an isolated context from within a context is not allowed. Change `RSpec.context` to `context` or move this to a top-level scope.

Затем я могу изменить его следующим образом:

def context_bar
  context "bar" do
    it "baz" do
      expect(true).to be true
    end
  end
end

describe "foo" do
  context_bar
end

И это прекрасно работает для меня, хотя я теряю удобочитаемость, связанную с наличием этого метода и аналогичных методов внутри пространства имен модуля.

Есть ли способ для меня, чтобы сделать эту работу?

(Обратите внимание, что этот вопрос имеет поверхностное сходство с другими, такими как this one или в Rspec docs here . Это, кажется, делает помощников доступными внутри примеров, но это не позволит мне фактически объявить контекст.)

1 Ответ

0 голосов
/ 02 сентября 2018

Как предлагается в комментариях, ответ здесь, как правило, заключается в использовании общих примеров. Таким образом, я могу изменить этот пример кода следующим образом:

RSpec.shared_examples "context_bar" do
  context "bar" do
    it "baz" do
      expect(true).to be true
    end
  end
end

describe "foo" do
  include_examples "context_bar"
end

Если, однако, я объявляю рекурсивную"функцию", такую ​​как:

RSpec.shared_examples "compare" do |ref1, ref2|
  ...
end

и позвоните по телефону:

include_examples "compare", ref1, ref2

Это не с:

ArgumentError:
  can't include shared examples recursively

См. Также общие примеры в документах .

В комментариях также предлагается, чтобы я мог использовать пользовательское сопоставление. Действительно, кто-то сделал что-то очень похожее здесь .

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