首页 > 解决方案 > 如何在所需功能上使用 Jasmine.js 间谍

问题描述

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

我正在尝试bizz使用间谍foobar功能进行测试,但效果不佳。

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

标签: javascriptunit-testingtestingjasminejasmine-node

解决方案


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

希望能帮助到你


推荐阅读