Я унаследовал приложение JS (узел). JS не мой самый сильный костюм, и определенно не обещания. Мне было поручено привести код в соответствие с современными стандартами, то есть с помощью классов и async / await. Я стараюсь быть хорошим разработчиком и создавать юнит-тесты. Вызовы в БД были выведены в отдельный класс persistor
, целью которого является насмешка. Тем не менее, издевательство, которое я создал, похоже, не работает. Похоже, что await
не ждет, так что скорее всего что-то не так с тем, как я издеваюсь. Тест не пройден с expected {} to deeply equal { Object (status, method, ...) }
.
Вот мой ложный персистор.
const mockPersistor = {
getModels: function getModels() {
RootLogger.debug('mockPersistor.getModels()');
return {
Category: 'Category',
Attribute: 'Attribute',
Option: 'Option'
};
},
setModels: function setModels() {
RootLogger.debug('mockPersistor.setModels()');
},
findXref: function findXref(model, conditions) {
RootLogger.debug(`mockPersistor.findXref(${model}, ${JSON.stringify(conditions)})`);
return new Promise((resolve, reject) => {
return {
status: 'success',
method: `findXref`,
model: `${model}`,
conditions: `${conditions}`
};
});
}
};
Тестируемый метод:
async getMagentoCategoryByNetSuiteId(netSuiteId, netSuiteRecordName) {
this.log.debug(`SystemXrefCache.getMagentoCategoryByNetSuiteId(${netSuiteId}, ${netSuiteRecordName})`);
const result = await this.findXref(
this.models.Category,
{
netSuiteId: JSON.parse(netSuiteId),
netSuiteRecordName: netSuiteRecordName
}
);
return result;
}
Метод findXref перенаправляет только на новый метод класса персистора, который я создал (для большей рефакторинга) с тем же именем:
async findXref(model, conditions) {
this.log.debug(`SystemXrefCache.findXref(${JSON.stringify(model)}, ${JSON.stringify(conditions)})`);
return await this.persistor.findXref(model, conditions);
}
Я пробовал несколько вариантов создания обещания в макете, но все безрезультатно. У меня есть async / await по всей линии - если только я не пропускаю очевидное, так что это не должно быть проблемой.
Так, возможно, проблема в самом тесте? Я также попробовал несколько вещей здесь, но это мой последний:
it('getMagentoCategoryByNetSuiteId returns successfully', function() {
RootLogger.debug(`=== starting test getMagentoCategoryByNetSuiteId returns successfully ===`);
const givenNetsuiteId = `99`;
const givenNetsuiteRecordName = `recordName`;
const expected = {
status: 'success',
method: `findXref`,
model: `Category`,
conditions: {
netSuiteId: 99,
netSuiteRecordName: `recordName`
}
};
const result = cache.getMagentoCategoryByNetSuiteId(
givenNetsuiteId,
givenNetsuiteRecordName
).then( resp => {
RootLogger.debug(`=== call completed!!! ===`);
return resp;
});
expect(result).to.deep.equal(expected);
});