Можно ли протестировать функцию js, которая ничего не возвращает с chai? - PullRequest
0 голосов
/ 07 января 2020

async executeEventEndSuccess(statusData) {
        if (storageType.toUpperCase() !== common.Blob) {
            let appStatus = status.getStatus(statusData.tenantId, statusData.viewerId, statusData.excutionId);
            uploadHelper.renameFileOnEndEvent(statusData.tenantId, statusData.viewerId, statusData.excutionId);
            appStatus.forEach(async ele => {
                if (ele.executionID === parseInt(statusData.excutionId) && ele.tenant === statusData.tenantId && ele.panel === statusData.viewerId && ele.tableName === common.type.panelWatch) {
                    try {
                        const updateDataPanelStatus = await panelStatusData.updatePanelStatus(statusData.tenantId, statusData.viewerId, ele.path)
                        eventRepo.updatePanelStatus(statusData.tenantId, statusData.viewerId, updateDataPanelStatus);
                    }
                    catch (error) {
                        throw error;
                    }
                };
            });
        }

        try {
            console.log(statusData.tenants);
            
            await eventRepo.executeEndProcedure(statusData);
        }
        catch (error) {
            throw error;
        }
    }

Здесь мне нужно проверить, существует ли appStatus в моей функции executeEventEndSuccess или нет? Мне нужно выполнить модульное тестирование для этой функции ??

1 Ответ

0 голосов
/ 07 января 2020

Краткий ответ: Да Я бы лично провел модульное тестирование для этой функции.

И Да Возможно подключить эту функцию в обратном направлении, используя такие инструменты, как mock-require или другие методы тестирования / разработки.

Похоже, эта функция выполняет ряд важных задач, которые могут быть полезны для тестового покрытия, чтобы проверить его работоспособность и защитить от регрессий:

  • Переименуйте файл, если не common.Blob
if (storageType.toUpperCase() !== common.Blob) {
...
uploadHelper.renameFileOnEndEvent(
  statusData.tenantId, 
  statusData.viewerId, 
  statusData.excutionId
);
  • Выполняет сопоставление статуса
if (ele.executionID === parseInt(statusData.excutionId) && ele.tenant === statusData.tenantId && ele.panel === statusData.viewerId && ele.tableName === common.type.panelWatch) {
  • Выполняет (распределенные?) Обновления состояния
const updateDataPanelStatus = await panelStatusData.updatePanelStatus(statusData.tenantId, statusData.viewerId, ele.path)
                        eventRepo.updatePanelStatus(statusData.tenantId, statusData.viewerId, updateDataPanelStatus);
  • Выполняет процедуру завершения
await eventRepo.executeEndProcedure(statusData);

Каждое из этих действий кажется довольно важным!

рассмотрим случай соответствия статуса. Без тестов, предположим, что вы все проверяете вручную, щелкаете по транзакции, чтобы убедиться, что все работает. Через пару месяцев возвращается другой инженер, который не думает, что ele.tenant используется больше, и снимает чек с условного. Без тестов нет отзывов об этом изменении, функция не защищена, клиент не защищен, а инженер не защищен!

Дополнительно рассмотрим функцию переименования. Это кажется довольно важным, если бы я работал в этой кодовой базе, я лично хотел бы, чтобы тесты освещали, что эта функция работала, и были защищены от введения регрессии, которая может привести к тому, что переименования не произойдет.

Наконец, тесты поможет вам проверить функции и потоки, работающие во время разработки, и сделает это с меньшими издержками и быстрее, чем ручное выполнение этих потоков.

Сложная часть сейчас фактически тестирует его :) Поскольку трудно выделить важные части функциональности, которые я перечислил выше. Вы можете изменить рефакторинг, чтобы помочь раскрыть эту функциональность и сделать ее непосредственно тестируемой, или вы могли бы использовать какую-то систему макетов / патчей, чтобы позволить вам подключиться к функциональности и утверждать вызовы.

...