Showcase of 3 approaches to mocking Mongo ObjectId
Here's the report according to 3 tests:
const identityObjectId = data => data;
(see ./src/identity-object-id.test.js)
Conclusions:
- super simple
- passes
toString
test, returns right values since'abc'.toString() === 'abc'
- fails the
ObjectId('a')
is anobject
test (it's astring
) - passes
ObjectId('a') === ObjectId('a')
test,'a' === 'a'
See ./src/naive-object-id.test.js
const naiveObjectId = data => {
return {
name: data,
toString: () => data
};
};
Conclusions:
- More involved
- passes
toString
test, returns right values since.toString()
returns whatever was passed into constructor - fails the
ObjectId('a') === ObjectId('a')
test, since toString is a new function - passes the
ObjectId('a')
is anobject
test
See ./src/object-id-mock.test.js
const mockObjectId = data => {
const oid = {
name: data
};
Object.defineProperty(oid, "toString", {
value: () => data
});
return oid;
};
Conclusions:
- Object.defineProperty() hackery...
- passes
toString
test, returns right values since.toString()
returns whatever was passed into constructor - passes the
ObjectId('a') === ObjectId('a')
test, since toString is not an enumerable property - passes the
ObjectId('a')
is anobject
test