Rspec:如何测试产量自我

时间:2013-11-15 10:48:11

标签: ruby unit-testing testing rspec

我正在使用rspec 3.0.0.beta1。我必须测试一个产生self的方法:

class Test
  def initialize
    yield self if block_given?
  end
end

这是一次成功的测试:

describe Test do
  context 'giving a block with one argument' do
    it 'yields self'
      expect { |b| described_class.new &b }.to yield_with_args described_class
    end
  end
end

但它只测试对象类,而不测试self的身份。

这是我写的最接近(失败)的测试:

describe Test do
  context 'giving a block with one argument' do
    it 'yields itself'
      instance = nil
      expect { |b|
        instance = described_class.new &b
      }.to yield_with_args instance
    end
  end
end

确实失败了,因为在评估最后一个实例时它是nil,所以它与块评估中的实例不匹配。

1 个答案:

答案 0 :(得分:5)

yield匹配器无法在您的情况下直接使用。最简单的事情是稍后用不同的匹配器改变你的第二个代码。

describe Test do
  context 'giving a block with one argument' do
    it 'yields itself'
      yielded_instance = nil
      new_instance = described_class.new { |i| yielded_instance = i }
      expect(yielded_instance).to be new_instance
    end
  end
end