为什么我收到错误“#let或#subject在没有块的情况下调用”?

时间:2017-06-12 16:29:48

标签: ruby rspec proc

我想知道如何将代码传递给共享示例。

我有这些规格(剪掉)

let(:property) { subject.send(type) }

    context 'when one or both depending properties are not set' do
      shared_examples_for 'not set' do |init_proc|
        it "imperial.value returns nil" do
          init_proc.call
          expect(property.imperial.value).to eq(nil)
        end
        # 3 similar examples snipped
      end

      context "when neither is set" do
        include_examples 'not set', Proc.new { }
      end

      context "when #{type1.inspect} is not set" do
        include_examples 'not set',  # error in this line
          Proc.new { subject.send("#{type2}=", [100, :imperial]) }
      end

      context "when #{type2.inspect} is not set" do
        include_examples 'not set',
          Proc.new { subject.send("#{type1}=", [100, :imperial]) }
      end
    end

令我惊讶的是我得到的错误:

RuntimeError:
   #let or #subject called without a block

我认为这会奏效。好像Proc.new会立即调用主题,而是在我调用init_proc.call时。那是怎么回事?

如果没有,那么导致错误的是什么?

PS。问题不是如何使这个代码工作。我得到了这段代码,我只对解释为什么我之前收到错误感兴趣。

0 个答案:

没有答案