【问题标题】:How can I use multiple RSpec contexts across a single example?如何在单个示例中使用多个 RSpec 上下文?
【发布时间】:2020-03-04 07:08:23
【问题描述】:

我有一组带有给定before 子句的上下文,我想围绕各种示例进行包装。这是我的尝试:

# The "multi-context" wrapper
def with_foo_and_bar(&block)
  before { p 'hello world' }

  context 'foo' do
    before { p 'baz' }
    yield
  end

  context 'bar' do
    before { p 'qux' }
    yield
  end
end

# The example
describe do
  with_foo_and_bar do
    it 'prints some stuff' do
      # Example runs twice, but only 'hello world' is printed
    end
  end
end

在本规范中,我希望所有before 子句都运行并打印出“baz”和“qux”一次,“hello world”两次,但只打印“hello world”(两次,正如预期的那样) .我觉得 yield 忽略 before 块存在一些问题,但我不确定如何调整代码以获得我想要的。如有任何建议,我将不胜感激!

【问题讨论】:

    标签: ruby rspec


    【解决方案1】:

    我在这里找到了提示的答案:

    https://www.jorgemanrubia.com/2010/01/16/using-macros-to-create-custom-example-groups-in-rspec/

    解决办法如下:

    def with_foo_and_bar(&block)
      foo = context 'foo' do
        before { p 'baz' }
      end
      foo.class_eval &block
    
      bar = context 'bar' do
        before { p 'qux' }
      end
      bar.class_eval &block
    end
    
    describe do
      with_foo_and_bar do
        it 'prints some stuff' do
          # Prints 'baz' once and 'qux' once
        end
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多