Как использовать Jasmine. js шпионить за необходимой функцией - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть этот код (Node.js):

Файл: utils. js

// utils.js
const foo = () => {
    // ....
}

const bar = () => {
    // ....
}

module.exports = { foo, bar }

Файл: myModule. js

// myModule.js
const {
    foo,
    bar
} = require('./utils');

const bizz = () => {
    let fooResult = foo()
    return bar(fooResult)
}

module.exports = { bizz }

Файл: myModule.spe c. js

// myModule.spec.js
const { bizz } = require('./myModule');
describe('myModule', () => {

    it('bizz should return bla bla bla', () => {
        let foo = jasmine.createSpy('foo').and.returnValue(true)
        let bar = jasmine.createSpy('bar').and.callFake((data) => {
            expect(date).toBeTrue();
            return 'fake-data'
        })

        expect(bizz()).toBe('fake-data')
    })
})

Я пытаюсь проверить bizz, используя шпионов для функций foo и bar, но это не работает хорошо.

Может кто-нибудь объяснить мне, как создавать шпионов на этих функциях с целью тестирования Bizz ??

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Да, это возможно. Вам просто нужно сначала запросить от utils до spyOn, затем myModule. Следующий тест пройдёт.

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

// myModule.spec.js
describe('myModule', () => {
  it('bizz should return bla bla bla', () => {
    const fooSpy = spyOn(utils, 'foo').and.returnValue(true);
    const barSpy = spyOn(utils, 'bar').and.callFake(data => {
      expect(data).toBeTrue();
      return 'fake-data';
    });

    const { bizz } = require('./myModule'); // Import myModule after you added the spyOn

    expect(bizz()).toBe('fake-data');

    expect(fooSpy).toHaveBeenCalled();
    expect(barSpy).toHaveBeenCalled();
  });
});

Надеюсь, это поможет

0 голосов
/ 13 февраля 2020

Похоже, это невозможно. https://github.com/mjackson/expect/issues/169

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