rxviz/lib/are-objects-same.test.js
2017-06-07 00:07:22 -07:00

122 lines
2.1 KiB
JavaScript

import areObjectsSame from './are-objects-same';
const obj = { a: 1 };
const noop = () => {};
const cases = [
{
objA: {},
objB: {},
result: true
},
{
objA: obj,
objB: obj,
result: true
},
{
objA: { a: 5 },
objB: { a: 5 },
result: true
},
{
objA: { a: 1 },
objB: { b: 1 },
result: false
},
{
objA: { a: 1 },
objB: { a: 1, b: 2 },
result: false
},
{
objA: { a: 1, b: 2 },
objB: { a: 1 },
result: false
},
{
objA: { a: 5, b: false, c: 'hey' },
objB: { a: 5, b: false, c: 'hey' },
result: true
},
{
objA: { a: noop },
objB: { a: noop },
result: true
},
{
objA: { a: noop },
objB: { a: noop },
keys: ['a'],
result: true
},
{
objA: { a: () => {} },
objB: { a: () => {} },
result: false
},
{
objA: { a: () => {} },
objB: { a: () => {} },
keys: ['a'],
result: false
},
{
objA: { a: { b: 9 } },
objB: { a: { b: 9 } },
result: false
},
{
objA: { a: { b: 9 } },
objB: { a: { b: 9 } },
keys: ['a'],
result: true
},
{
objA: { a: { b: 9 } },
objB: { a: null },
keys: ['a'],
result: false
},
{
objA: { a: null },
objB: { a: { b: 9 } },
keys: ['a'],
result: false
},
{
objA: { a: { b: 9, c: 'hi' } },
objB: { a: { b: 9 } },
keys: ['a'],
result: false
},
{
objA: { a: { b: 9 } },
objB: { a: { b: 9, c: 'hi' } },
keys: ['a'],
result: false
},
{
objA: { a: { b: 9 }, c: { d: null } },
objB: { a: { b: 9 }, c: { d: null } },
keys: ['a', 'c'],
result: true
},
{
objA: { a: { b: 9 }, c: { d: {} } },
objB: { a: { b: 9 }, c: { d: {} } },
keys: ['a', 'c'],
result: false
}
];
describe('areObjectsSame', () => {
cases.forEach(({ objA, objB, keys, result }) => {
it(`should return ${result} for ${JSON.stringify(
objA
)} and ${JSON.stringify(objB)}${keys ? ` with keys ${keys}` : ''}`, () => {
expect(areObjectsSame(objA, objB, keys)).toEqual(result);
});
});
});