【问题标题】:How do I spy an exported function invocation in JavaScript using sinon如何使用 sinon 在 JavaScript 中监视导出的函数调用
【发布时间】:2018-10-15 23:27:26
【问题描述】:

这是我试图模拟的实际代码

import {combineReducers} from 'redux'

import user from '../user'

export default combineReducers({
    user
})

我想设置一个这样的测试:

describe('API Reducer', () => {
    it('calls combineReducers om modules', function() {
        const combinedReducerSpy = sinon.spy(...) // <-- UNKNOWN
        sinon.assert.calledWith(combinedReducerSpy, {user})
    });
});

【问题讨论】:

  • 你不使用任何模拟,你需要模拟导入然后用间谍替换它。
  • 环境是什么?您是在 Node 中还是在浏览器中进行测试?测试文件是如何构建的?测试中是否使用了 Webpack?
  • 我知道如何在 Python 中做到这一点,但我是 JavaScript 新手。如何模拟导入然后用间谍替换它?我在创建反应应用程序中使用 jest 运行测试。问题是,当我将文件导入另一个文件时,它会在导入时执行。
  • 是的,您使用 Jest 的事实很重要。这个问题主要针对 Jest,而不是针对诗乃。试试jest.doMock('redux'); require('.../mycode'); let { combineReducers } = require('redux'); expect(combineReducers).toBeCalledWith(user)。不要忘记 beforeEach 中的jest.resetModules()。我希望 Jest 清除模块缓存并允许重新导入模块,但我无法确认。

标签: javascript unit-testing ecmascript-6 sinon


【解决方案1】:

我用我的答案写了一篇博文。 感谢您的帮助!

I wrote a JavaScript Unit Test today... Mock Import Time Function

// reducers.js
import {combineReducers} from 'redux'
import widget from './widget'
export default combineReducers({
    widget
})

// reducers.test.js
import redux from 'redux'
import widget from './widget'

describe('Use jest', () => {
    afterEach(() => {
        jest.resetModules()
    });

    test('first test', () => {
        jest.doMock('redux');

        require('./reducers');
        let {combineReducers} = require('redux');

        expect(combineReducers).toBeCalledWith({"widget": widget})
    });
});

【讨论】:

    猜你喜欢
    • 2017-12-20
    • 2015-05-13
    • 2013-01-25
    • 2016-01-02
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    相关资源
    最近更新 更多