Модульный тест с обработкой обещаний - node.js - PullRequest
0 голосов
/ 28 июня 2018

Я хочу сделать модульный тест с асинхронной функцией кода. и вот мой код на user.test.js

'use strict'
const UserDomain = require("../../../../../../bin/modules/users/repositories/commands/domain")
const UserHandler = require("../../../../../../bin/modules/users/repositories/commands/command_handler")
const expect = require('chai').expect;
const assert = require('chai').assert;
const sinon = require('sinon');
describe('User domain', () => {
describe('".login(data)"', () => {
    let user;
    beforeEach( () => {
        user = {
            clientId : "adithyavisnu",
            clientSecret : "secretOfmine@19"
        }

    });
    it("should return error when username/password is empty", (done)=> {
        done();
        // let 
    })

    it("should return object", async () => {
        const domainStub = sinon.stub(UserDomain.prototype, 'login');
        const result = await UserHandler.login(user);
        sinon.assert.calledOnce(domainStub);
        domainStub.restore();
    })
});
});

Если нормальный код (а не код модульного теста выше), const result = await UserHandler.login(user); будет иметь объектный ответ, но когда я делаю в user.test.js, он не получает ответ. result не определено.

вот код user_handler

'use strict';
const User = require('./domain');
const login = async (data) => {
const postData = async () => {
    const user = new User();
    const result = await user.login(data);
    return result;
}
const response = await postData();
return response;
}

Что-то я не так сделал в коде или какой-то код отсутствует?

Извините, если вы думаете, что есть неясная информация

Спасибо за ответы

1 Ответ

0 голосов
/ 28 июня 2018

В обычном потоке UserHandler вызывает метод Domain.login и возвращает объект результата. Когда вы запускаете модульный тест, вы заглушаете метод Domain.login. поэтому он не вернет результат как обычный поток. Вы можете заставить заглушку возвращать некоторый объект результата и проверить это, или просто шпионить за Domain.login вместо того, чтобы ставить его в тупик, если вы просто хотите проверить, был ли вызван Domain.login без изменения его поведения. Узнайте больше о шпионах / шпионах здесь, если хотите - http://sinonjs.org/releases/v1.17.7/stubs/

...