У меня сейчас проблема с тестом мокко. Я хочу протестировать метод getById, который возвращает объект из базы данных mongodb. Все работает нормально, кроме сравнения даты. Это то чем я занимаюсь.
описать ('Service.Step.getById', function () {
before(done => {
mongoose.connect(getConnectionString());
mongoose.connection.on('error', () => {
console.error("Connecting to database failed");
});
mongoose.connection.once('open', () => {
console.info('Connected to Database');
done();
});
});
it('should return a step', async function(){
assert.equal((await StepService.getById("someId")).toObject(), {
Title : "SomeTitle",
_id: mongodb.ObjectID("someId"),
SchemaVersion : "0.0.1",
Description: "SomeDescription",
Video: "Video.mp4",
Image : null,
__v : 0,
Created : "2018-09-05T15:24:11.779Z",
Updated : "2018-09-05T15:24:11.779Z"
});
});
Теперь проблема в том, что, очевидно, мангуст возвращает объект даты, а не просто строку. (вот что показывает тест)
- "Updated": [Date: 2018-09-05T15:24:11.779Z]
- "Updated": "2018-09-05T15:24:11.779Z"
однако, если я заменю Created (или Updated) в assert на
Created : new Date("2018-09-05T15:24:11.779Z")
мой тест полностью проваливается. Ты знаешь, как я могу это исправить?
Хорошо. На самом деле ответ был довольно прост. Кажется, что Date сделает объект вложенным и
assert.equal
больше для этого работать не будет. Вместо этого используйте
assert.deepEqual
и он будет работать как положено. Правильный код будет
before(done => {
mongoose.connect(getConnectionString());
mongoose.connection.on('error', () => {
console.error("Connecting to database failed");
});
mongoose.connection.once('open', () => {
console.info('Connected to Database');
done();
});
});
it('should return a step', async function(){
assert.deepEqual((await StepService.getById("someId")).toObject(), {
Title : "SomeTitle",
_id: mongodb.ObjectID("someId"),
SchemaVersion : "0.0.1",
Description: "SomeDescription",
Video: "Video.mp4",
Image : null,
__v : 0,
Created : new Date("2018-09-05T15:24:11.779Z"),
Updated : new Date("2018-09-05T15:24:11.779Z")
});
});
равный утверждает нестрогое равенство (==) фактического и ожидаемого. например
{a:1} == {a:1} //false
deepEqual утверждает, что действительный глубоко равен ожидал
assert.deepEqual({ tea: 'green' }, { tea: 'green' }); //true