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

时间:2015-12-06 02:04:35

标签: javascript jasmine ecmascript-6 redux

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

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;
  }
}

1 个答案:

答案 0 :(得分:31)

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

import * as widget from './widget';

describe('widget spec', () => {
    beforeEach(() => {
        spyOn(widget, 'default');
    });
});