【问题标题】:How to use Jasmine.js spy on a required function如何在所需功能上使用 Jasmine.js 间谍
【发布时间】:2020-02-10 11:25:22
【问题描述】:

我有这个代码(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??

【问题讨论】:

    标签: javascript unit-testing testing jasmine jasmine-node


    【解决方案1】:

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

    希望对你有帮助

    【讨论】:

    • 有效!但是我怎样才能为下一次测试覆盖间谍呢?在下一个测试中,如果 foo 返回 false,我想测试 bizz 函数的结果。有什么线索吗?
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      相关资源
      最近更新 更多