1. ホーム
  2. javascript

[解決済み] オブジェクトをプロパティのサブセットで比較するためのjasmine matcherはありますか?

2023-03-23 22:57:53

質問

テスト中の動作に沿って拡張される可能性のあるオブジェクトがありますが、元のプロパティがまだそこにあることを確認したいのです。

var example = {'foo':'bar', 'bar':'baz'}

var result = extendingPipeline(example)
// {'foo':'bar', 'bar':'baz', 'extension': Function}

expect(result).toEqual(example) //fails miserably

という流れで、この場合にパスするようなマッチャーを用意したいですね。

expect(result).toInclude(example)

私はカスタムマッチャーを書くことができることを知っていますが、これは非常に一般的な問題なので、解決策がすでにあるはずだと思います。どこでそれを探せばいいのでしょうか?

どのように解決するのですか?

Jasmine 2.0

expect(result).toEqual(jasmine.objectContaining(example))

今回の修正から https://github.com/pivotal/jasmine/commit/47884032ad255e8e15144dcd3545c3267795dee0 はネストしたオブジェクトに対しても有効で、 部分的にマッチさせたいオブジェクトをそれぞれ jasmine.objectContaining()

簡単な例です。

it('can match nested partial objects', function ()
{
    var joc = jasmine.objectContaining;
    expect({ 
        a: {x: 1, y: 2}, 
        b: 'hi' 
    }).toEqual(joc({
        a: joc({ x: 1})
    }));
});