Jest:オブジェクトのキーとプロパティをテストする方法


94

mapModuleコンポーネントをインポートしてエクスポートする場所があります。

import ComponentName from '../components/ComponentName';

export default {
  name: ComponentName,
};

mapModule正しくエクスポートされたキー、値があり、それらがnullまたは未定義ではないことをテストするにはどうすればよいですか?

回答:


129

jestのバージョン23.3.0では、

expect(string).toMatch(string) 

文字列が必要です。

使用する:

const expected = { name:'component name' }
const actual = { name: 'component name', type: 'form' }
expect(actual).toMatchObject(expected)

結果はテストに合格しています


101

次のいずれかを使用できます。

toEqualとtoMatchObjectは、オブジェクトのテンプレートマッチャーです。

let Obj = {name: 'component name', id: 2};
expect(oneObj).toEqual({name: 'component name'}) // false, should be exactly equal all Obj keys and values  
expect(oneObj).toMatchObject({name: 'component name'}) // true

またはtoHavePropertyを簡単に使用できます:

let Obj = {name: 'component name'};
expect(oneObj).toHaveProperty('name') // true
expect(oneObj).toHaveProperty('name', 'component name') // true

24
この答えはもはや正しくありません。@ user3605834で指定されているtoMatch必要がありtoMatchObjectます
Kristoffer Dorph 2018

1
それは@KristofferDorphさんのコメントに応じて更新されました
Despertaweb

8

.toMatchObject「JavaScriptオブジェクトがオブジェクトのプロパティのサブセットと一致すること」をチェックすることに注意してください。したがって、意図しないアサーションが含まれる可能性があります。

expect({ a: 1, b: 2 }).toMatchObject({ a: 1 }); // pass

オブジェクトを正確に一致させたい場合は、を使用する必要が.toStrictEqualありますjest 23

expect({ a: 1, b: 2 }).toStrictEqual({ a: 1 }); // fail

実際、それはまさにtoMatchObjectが設計されたアサーションです。その動作を望まない場合は、toEqualを使用できます...
Dan

0

単一のキーについては、チェックアウトできます

expect(Boolean(obj[prop])).toBe(true | false);

複数のキー(すべてが存在する必要がある場合)の場合、次を使用できます。

expect(Boolean(obj[prop1]) && Boolean(obj[prop2])).toBe(true | false);

複数のキー(いずれかが存在する必要がある場合)の場合、次を使用できます

expect(Boolean(obj[prop1]) || Boolean(obj[prop2])).toBe(true | false);

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.