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
toStringtest, returns right values since'abc'.toString() === 'abc' - fails the
ObjectId('a')is anobjecttest (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
toStringtest, 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 anobjecttest
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
toStringtest, 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 anobjecttest
