2

rspec が提供する引数マッチャーを使用して、ハッシュの配列を照合したいと考えています。これは理想的には私が望むコードです:

  context 'logging stock levels' do
    subject { double(:stock_logger, stock_updated: nil) }
    let(:stock_importer) { described_class.new(logger: subject) }
    before(:each) { stock_importer.import }

    it { is_expected.to have_received(:stock_updated)
                          .with(array_including(hash_including('sku', 'count_on_hand'))) }
  end

これは、引数の不一致でエラーになりました。私が思いつくことができる唯一の実用的な解決策は次のとおりです。

  context 'logging stock levels' do
    subject { double(:stock_logger, stock_updated: nil) }
    let(:stock_importer) { described_class.new(logger: subject) }
    before(:each) { stock_importer.import }

    it do
      is_expected.to have_received(:stock_updated) do |stock_levels|
        expect(stock_levels).to include(include('sku', 'count_on_hand'))
      end
    end
  end

私は何か間違ったことをしただけですか?

4

2 に答える 2

1

Rspec 3.3では、これでうまくいきました:

expect(<Object>).to receive(:method).with(
  array_including(hash_including( {"id" => some_id} ))
)
于 2015-07-10T18:26:44.970 に答える
0

array_includingハッシュキーで試してみてください。テストされていませんが、おそらく次のようなものです。

it do
  is_expected.to have_received(:stock_updated)
    .with(include(include("sku"), include("bar")))
end
于 2014-10-28T15:50:59.520 に答える