Мок Обещание, но запустить фактический код внутри, а затем блокировать - PullRequest
0 голосов
/ 27 февраля 2020

Я новичок в javascript испытательной рамке. У меня проблема с издевательством над Promise. Мой код выглядит так:

this.convertEvent(
    () => {
        addUser(this.getProp("criterion")).then((reply) => {
            if (reply[0].m_status === "S") {
                this.getUser();
            }
        });
    });

В моем модульном тесте, когда я выполняю вызов convertEvent, мне нужно выполнить два метода addUser и getUser (это выполняется, когда ответ приходит от addUser). Я использую spyOn () примерно так:

let thenFunc;
        beforeEach(() => {
            promiseSpyObj.then.and.callFake((func) => {
                thenFunc = func;
                return [{ m_status : "S" }];
            });
            let arrayReply = [{ m_status : "S" }];
            spyOn(className, "addUser").and.returnValue(promiseSpyObj);
            spyOn(className, "getUser").and.returnValue(promiseSpyObj);

И я ожидаю: expect(className.addUser).toHaveBeenCalled(); expect(className.getUser).toHaveBeenCalled();

Но я замечаю только то, что вызывается только addUser (). Я ожидаю, что обещание addUser должно разрешиться и должен быть вызван getUser.

1 Ответ

0 голосов
/ 01 марта 2020

Во-первых, как вы упомянули в spe c, addUser должен быть похож на this.addUser. Тогда ваша spe c может быть такой, как показано ниже:

let reply = [{m_status : "S"}]
spyOn(className, "getUser")
spyOn(className, "addUser").and.returnValue(
    Promise.resolve(reply);
)

className.addUser().then(function () {
    expect(className.getUser).toHaveBeenCalled();
})

Кроме того, вам нужно видеть, когда вы вызываете функцию convertEvent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...