如何使用Jasmine监视通过ES6默认导出导入的函数?

evk*_*ine 21 javascript jasmine ecmascript-6 redux

我正在开发一个Redux应用程序并试图在ES6默认导出函数上使用Jasmine创建一个间谍.我已经尝试了几种不同的方法来监视函数,包括使用通配符导入来访问导入的'default'属性,但到目前为止我没有尝试过.下面是一个示例,我想测试widgets.js和监视小部件功能.有没有办法实现这一点,而无需改变im导出函数的方式widget.js

widget.js

import { Map } from 'immutable';
import { CREATE_WIDGET } from 'actions';

const initialState = Map({
  id: undefined,
  name: undefined
});

export default function widget(state=initialState, action) {
  switch (action.type) {
    case CREATE_WIDGET:
      return state.update((widget) => widget.merge(action.widget));

    default:
      return state;
  }
}
Run Code Online (Sandbox Code Playgroud)

widgets.js

import { OrderedMap } from 'immutable';
import { CREATE_ROOM } from 'actions';
import widget from './widget';

const initialState = OrderedMap();

export default function widgets(state=initialState, action={}) {
  switch (action.type) {
    case CREATE_ROOM:
      return state.set(action.widget.id, widget(undefined, action));

    default:
      return state;
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 31

你说你尝试导入通配符并监视默认情况?这种方法有什么问题?我刚遇到这个问题,这样做就解决了我:

import * as widget from './widget';

describe('widget spec', () => {
    beforeEach(() => {
        spyOn(widget, 'default');
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 我收到错误“未声明可写或没有设置器”。 (16认同)
  • 它并不重要,因为生产代码不应该包括测试文件 (9认同)