Sinon Stub весь класс - PullRequest
       89

Sinon Stub весь класс

0 голосов
/ 06 августа 2020

У меня есть класс ниже в A.js файле,

class A {
    constructor(name) {
        this.name = name;
    }

    getResult() {
        return this.name;
    }
}

module.exports = A

В другом файле с именем controller.js, я использую вот так:

const A = require('./A');

module.exports = {
    doProcess: () => {
        const a = new A('John');

        console.log(a.getResult());
    }
}

Итак, мое требование я хочу заглушить класс A и его методы при написании модульных тестов для controller.js. Как я могу добиться этого с помощью sinon?

Что-то вроде

const getResultStub = sinon.stub();
getResultStub().returns('success');

1 Ответ

0 голосов
/ 06 августа 2020

Если это экспорт по умолчанию, я не верю, что вы можете напрямую заглушить его.

Если вы работаете в среде nodejs, вы можете использовать proxyquire или что-то вроде:

// A.js

class A {
    constructor(name) {
        this.name = name;
    }

    getResult() {
        return this.name;
    }
}

module.exports = A
// controller.spec.js

const sinon = require('sinon')

class DummyA {
  constructor(){}
  getResult(){
    return 'success'
  }
}

require.cache[require.resolve('./A')] = DummyA

const controller = require('./controller.js')
...