This is my FollowerModel
class (in ES6) representing follower
collection of my MongoDB
import mongo from 'mongodb';
class FollowerModel {
constructor(db, logger) {
this._db = db;
this._logger = logger;
}
async create(data) {
try {
data._id = mongo.ObjectID().toString();
return await this._db.collection('follower').insertOne(data);
} catch (error) {
return Promise.reject(error);
}
}
}
export default FollowerModel;
And this is my unit test
import chai from 'chai';
import chaiAsPromised from 'chai-as-promised';
import { expect } from 'chai';
import mongo from 'mongodb';
import mongo_url from '../../config/mongodb';
import logger from '../../config/logger';
import to from 'await-to-js';
import FollowerModel from '../../model/follower';
const MongoClient = mongo.MongoClient;
const data = {
email: 'my_email',
phone: 'my_phone',
code: 'my_code'
};
describe('Model: Follower', () => {
let Follower;
let connected = false;
let _db;
const connect = () => {
try {
const db = await MongoClient.connect(mongo_url);
Follower = new FollowerModel(db, logger);
connected = true;
_db = db;
return Promise.resolve();
} catch (error) {
return Promise.reject(error);
}
};
before(() => connect());
describe('create', () => {
let _id;
beforeEach(() => connected ? null : connect());
it('Returns with insertedId', async () => {
const [, result] = await to(Follower.create(data));
return expect(result).to.have.property('insertedId');
});
afterEach(() => connected ?
_db.collection('follower').deleteOne({ _id }) : connect().then(() => _db.collection('follower').deleteOne({ _id }))
);
});
});
This test fails, the error is this._db.collection is not a function
much to my frustration. As I initialize Follower
instance, db
is passed to the constructor, initializing db
successfully in class. I even tried to console.log
both db
and db.collection
. It does log db
as expected but returns undefined
for db.collection
. This confuses me