JS обещание решить не работает в фиктивной функции - PullRequest
0 голосов
/ 24 апреля 2018

Я унаследовал приложение 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);
    });
...