相关疑难解决方法(0)

如何模拟ES6模块的导入?

我有以下ES6模块:

network.js

export function getDataFromServer() {
  return ...
}
Run Code Online (Sandbox Code Playgroud)

widget.js

import { getDataFromServer } from 'network.js';

export class Widget() {
  constructor() {
    getDataFromServer("dataForWidget")
    .then(data => this.render(data));
  }

  render() {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来测试Widget的模拟实例getDataFromServer.如果我使用单独的<script>s代替ES6模块,比如在Karma中,我可以编写我的测试:

describe("widget", function() {
  it("should do stuff", function() {
    let getDataFromServer = spyOn(window, "getDataFromServer").andReturn("mockData")
    let widget = new Widget();
    expect(getDataFromServer).toHaveBeenCalledWith("dataForWidget");
    expect(otherStuff).toHaveHappened();
  });
});
Run Code Online (Sandbox Code Playgroud)

但是,如果我在浏览器之外单独测试ES6模块(比如使用Mocha + babel),我会写一些类似于:

import { Widget } from 'widget.js';

describe("widget", function() {
  it("should do stuff", function() {
    let getDataFromServer = spyOn(?????) …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing mocha.js ecmascript-6

133
推荐指数
4
解决办法
5万
查看次数

标签 统计

ecmascript-6 ×1

javascript ×1

mocha.js ×1

unit-testing ×1