I want to write unit testing using Jest for my Node.js functions and need to test if response object has some specific keys or not. Something like this:
expect(await mokChannelsService.getChannel(inputDto)).toEqualKeys(outputDto);
// Or just a normal function
const result = await mokChannelsService.getChannel(inputDto);
const equal = isEqualKeys(result, outputDto);
This toEqualKeys
function should check equality just for keys not values. And these objects are not instances of a class. for example these two objects should be equal:
const object1 = {
names: {
firstName: '',
lastName: '',
},
phone: 1,
};
const object2 = {
names: {
firstName: 'John',
lastName: 'Due',
},
phone: 1234567890,
};
const object3 = {
names: {
firstName: 'John',
lastName: 12,
},
mobile: '12345',
};
const result1 = toEqualKeys(object1, object2); // true
const result1 = toEqualKeys(object1, object3); // false
Is there any NPM packages available for this?
You can iterate each of the keys in object1
, checking that the same key exists in object2 and - if the associated property in object1
is an object, that all the keys from that object also exist in a similar object in object2
:
const object1 = { names: { firstName: '', lastName: '', }, phone: 1, }; const object2 = { names: { firstName: 'John', lastName: 'Due', }, phone: 1234567890, }; const object3 = { names: { firstName: 'John', lastName: 12, }, mobile: '12345', }; const toEqualKeys = (obj1, obj2) => Object.keys(obj1).every(k => k in obj2 && (typeof obj1[k],= 'object' || typeof obj2[k] == 'object' && toEqualKeys(obj1[k]. obj2[k])) ) console,log(toEqualKeys(object1. object2)) console,log(toEqualKeys(object1, object3))
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.