如何使用 Jasmine.js 监视所需的功能

How to use Jasmine.js spy on a required function

我有这个代码 (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')
    })
})

我正在尝试在 foobar 函数上使用间谍来测试 bizz,但效果不佳。

任何人都可以向我解释如何在这些功能上创建间谍以测试 bizz 吗?

好像不行。 https://github.com/mjackson/expect/issues/169

是的,这是可能的。 您只需要先要求 utilsspyOn,然后再要求 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();
  });
});

希望对您有所帮助