Вызов метода-заглушки Sinon из другого файла - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь настроить модульные тесты в моем проекте. Для этого я использую библиотеки мокко чай и синон. Я использую сервер NodeJs версии 8.

Версии:

Синон: "7.1.0" Мокко: "5.1.0" Чай: "4.2.0"

Я бы хотел заглушить метод, который объявлен в другом файле.

Вот пример:

- a.js
   exports.FnA(return FnB())
- b.js
   exports.FnB()

Я хочу заглушить метод FnB () из файла b.js, чтобы я мог проверить FnA () независимо от возврата FnB ().

Вот что я пробовал:

beforeEach(() => {
            this.FnBStub = sinon.stub(b, 'FnB').returns('mocked');
        });

afterEach(() => this.FnBStub.restore());

it('should mocked FnB function', () => {
            try {
                console.log(b.FnB()); //returns 'mocked'
                console.log(a.FnA()); //return error from FnB() execution ...
            } catch (e) {
                console.log(e);
            }
        });

Он заглушает метод FnB (), но только когда я вызывал его из экземпляра b-файла. Поэтому, когда я позвонил в FnA (), заглушка, кажется, ушла ...

Что мне не хватает?

Некоторая помощь будет очень признательна, спасибо :)

РЕДАКТИРОВАТЬ :

a.js пример:

const FnB = require('./FnB)

exports.FnA = data => {
    const limit = data.releases.update ? 60 : 20;
    return FnB(data.ref, limit)
};

b.js пример:

exports.FnB = (ref, page, query) => {
   //API call
}

testFile.js пример:

const a = require('../a')
const b = require('../b')

beforeEach(() => {
            this.FnBStub = sinon.stub(b, 'FnB').returns('mocked');
        });

afterEach(() => this.FnBStub.restore());

it('should mocked FnB function', () => {
            try {
                console.log(b.FnB()); //returns 'mocked'
                console.log(a.FnA()); //return error from FnB() execution ...
            } catch (e) {
                console.log(e);
            }
        });

Итак, как я уже сказал, я хотел бы заглушить этот вызывающий метод FnB и просто проверить, вызывается ли этот метод с правильными параметрами.

1 Ответ

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

Если экспортируемый модуль является самой функцией, а не частью объекта, вы не можете заглать его напрямую.

Вам нужно использовать что-то вроде proxyquire . Ваш тестовый код будет выглядеть примерно так:

const FnBstub = sinon.stub();
const proxyquire = require('proxyquire');
const a = proxyquire('../a', {
    FnB: FnBstub
});
const b = require('../b');

Для получения дополнительной информации, смотрите здесь: https://github.com/sinonjs/sinon/issues/664

...