Skip to content
Examples of mocking Mongo ObjectId (test framework agnostic)
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
img
src
.editorconfig
.gitignore
LICENSE
README.md
package-lock.json
package.json

README.md

Mock Mongo ObjectId

Showcase of 3 approaches to mocking Mongo ObjectId

Here's the report according to 3 tests:

Report of passing/failing tests per approach

Identity mocking

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 an object test (it's a string)
  • passes ObjectId('a') === ObjectId('a') test, 'a' === 'a'

Naive mocking

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 an object test

Working mock

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 an object test
You can’t perform that action at this time.