класс не зарезан - PullRequest
       74

класс не зарезан

0 голосов
/ 28 сентября 2018

Я начал писать примеры модульных тестов, используя sinon, и столкнулся со следующей проблемой:

myfile.js

module.exports = class A{
    constructor(classB_Obj){
        this.classBobj = classB_Obj;
        classBobj.someFunctionOfClassB(); // error coming here
    }
    doSomething(){

    }
}

, где класс B находится в

myfile2.js

module.exports = class B{
    constructor(arg1, arg2){
        this.arg1 = arg1;
        this.arg2 = arg2;
    }
    someFunctionOfClassB(){

    }
}

, когда я тестирую класс A и использую sinon для заглушки класса B

const myfile2 = require('../myfile2').prototype;
const loggerStub = sinon.stub(myfile2, 'someFunctionOfClassB');

, при его выполнении выдается исключение classBobj.someFunctionOfClassBэто не функция.Как правильно его заглушить?Я не хочу создавать экземпляр класса B.

1 Ответ

0 голосов
/ 16 октября 2018

Это на самом деле не имеет ничего общего с заглушкой.

Вы должны определить эту функцию как статический метод , чтобы добиться этого:

module.exports = class B{
    constructor(arg1, arg2){
        this.arg1 = arg1;
        this.arg2 = arg2;
    }
    static someFunctionOfClassB(){

    }
}

Затем вы можете вызвать метод объекта класса.

Когда вы пишете обычный метод класса , вам всегда нужно создать экземпляр класса, прежде чем вы сможетеиспользуйте его в экземпляре:

const b = new class_Obj();
b.someFunctionOfClassB();

См. также: Класс против статического метода в JavaScript

...