Как проверить звонок на супер используя sinonjs? - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть класс javascript / typcript (AAA), который расширяет другой класс (BBB).API класса BBB стабилен, но реализации пока нет.Я просто хочу провести модульное тестирование некоторых функций только в классе AAA.Поэтому мне нужно создать экземпляр класса AAA, но пока он не был успешным из-за вызова конструктора класса BBB.Это мой пример :

BBB.ts:

class BBB {
    constructor() {
        throw new Error("BBB");
    }
    public say(msg: string): string {
        return msg;
    }
}

module.exports = BBB;

AAA.ts:

const BB = require("./BBB");

class AAA
    extends BB {
    public hello(): string {
        return super.say("Hello!");
    }
}
module.exports = AAA;

тестовый скрипт:

const AA = require("../src/AAA");

import sinon from "sinon";

describe("Hello Sinon", () => {
    describe("#hello", () => {
        it("#hello", async () => {
            const stub = sinon.stub().callsFake(() => { });
            Object.setPrototypeOf(AA, stub);
            let a = new AA();

            sinon.spy(a, "hello");

            a.hello();

            sinon.assert.calledOnce(a.hello);
            sinon.assert.calledOnce(stub);

            // how to verify that super.say has been called once with string "Hello!"?
        });
    });
});

Я использую sinonjs .Но в этом случае я не могу создать экземпляр AAA.И если мы можем, как проверить, что super.say функции были вызваны?

Спасибо!

ОБНОВЛЕНИЕ : Теперь я могу создать экземпляр AAA, ноЯ не знаю, как проверить звонок на super.say.

1 Ответ

0 голосов
/ 16 февраля 2019

Я нашел решение для моей проблемы:

describe("Hello Sinon", () => {
    describe("#hello", () => {
        it("#hello", async () => {
            const stub = sinon.stub().callsFake(() => { });
            Object.setPrototypeOf(AA, stub);
            let a = new AA();
            const say = sinon.spy(a.__proto__.__proto__, "say");

            sinon.spy(a, "hello");

            a.hello();
            a.hello();

            sinon.assert.calledTwice(a.hello);
            sinon.assert.calledOnce(stub);
            sinon.assert.calledTwice(say);
        });
    });
});
...