如何测试Stack中是否包含Ruby和rspec中的元素?

时间:2014-09-09 02:08:43

标签: ruby rspec

我的Stack模块有以下规格:

describe Stack do
  let(:stackable_obj) { (Class.new { include Stack }).new }

  describe '#stack' do
    context 'when it has no elements' do
      it 'is an empty array' do 
        expect(stackable_obj.stack).to eq([])
      end
    end
  end
  ..
end

我没有看到如何测试堆栈在非空时返回元素。我的模块看起来像这样:

module Stack
  def stack
    @stack ||= []
  end
end

我会模拟堆栈方法吗?我这样做了:

context 'when it has elements' do
  it 'gives an array with the elements' do 
    allow(stackable_obj).to receive(:stack).and_return([1,2,3])
    expect(stackable_obj.stack).to eq([1,2,3])
  end
end

但不知怎的,这似乎是一个无用的测试,因为我实际上在嘲笑我正在测试的方法。

1 个答案:

答案 0 :(得分:0)

在我看来,it 'gives an array with the elements'测试用例的存根是一个级别太高。您希望确保调用stackable_obj.stack时返回stackable_obj的{​​{1}}实例变量中包含的值,因此@stack的值是我认为的你想要存根:

@stack