Javascript 如何在所需函数上使用Jasmine.js spy

Javascript 如何在所需函数上使用Jasmine.js spy,javascript,unit-testing,testing,jasmine,jasmine-node,Javascript,Unit Testing,Testing,Jasmine,Jasmine Node,我有以下代码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 = () => {

我有以下代码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.spec.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')
    })
})
我试图在foo和bar函数上使用spies测试bizz,但效果不好


有人能告诉我如何在这些函数上创建间谍来测试bizz吗?

似乎不可能

是的,这是可能的。 您只需要首先向spyOn请求UTIL,然后请求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();
  });
});

希望它有帮助

它能工作!但是我如何覆盖间谍进行下一次测试?在下一个测试中,如果foo返回false,我想测试bizz函数的结果。有线索吗?