Jest: Nesne anahtarları ve özellikleri nasıl test edilir?


94

mapModuleBileşenleri aldığım ve dışa aktardığım bir yerim var :

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

export default {
  name: ComponentName,
};

mapModuleDoğru dışa aktarılan anahtarlara, değerlere sahip olduğunu ve bunların boş veya tanımsız olmadığını nasıl test edebilirim ?

Yanıtlar:


129

Jest'in 23.3.0 sürümünde,

expect(string).toMatch(string) 

bir dize bekliyor.

Kullanım:

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

sonuç testi geçiyor


101

şunlardan birini kullanabilirsiniz:

toEqual ve toMatchObject nesneler için şablon eşleştiricilerdir:

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

veya toHaveProperty'yi kolayca kullanın:

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

24
Bu cevap artık doğru değil. @ user3605834 tarafından belirtildiği gibi toMatcholmalıdırtoMatchObject
Kristoffer Dorph

1
@KristofferDorph'un yorumuna göre güncellendi
Despertaweb

8

.toMatchObject"Bir JavaScript nesnesinin, bir nesnenin özelliklerinin bir alt kümesiyle eşleşip eşleşmediğini" kontrol ettiğini unutmayın . Dolayısıyla, aşağıdaki gibi istenmeyen iddialara sahip olabilir:

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

Bir nesneyi tam olarak eşleştirmek istiyorsanız, şu .toStrictEqualtarihten itibaren mevcut olanı kullanmalısınız jest 23:

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

Aslında bu, tam olarakMatchObject'in tasarlandığı iddiadır. Bu davranışı istemiyorsanız, toEqual'ı kullanabilirsiniz ...
Dan

0

Tek bir anahtar için kontrol edebilirsiniz

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

Çoklu anahtar için (hepsinin mevcut olması gereken yerlerde) kullanabilirsiniz,

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

Birden fazla anahtar için (herhangi birinin bulunması gereken yerde) kullanabilirsiniz

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.