摩卡,诗乃和剔除窗户物体

时间:2016-05-18 18:23:50

标签: webpack mocha aws-sdk sinon

我有一个ES6模块,我正在尝试为前端react / redux应用程序编写测试。

以下是模块中我在测试中绊倒的部分:

import 'aws-sdk/dist/aws-sdk';
import Bluebird from 'bluebird';

const AWS = window.AWS;

这是我测试的开始:

import chai from 'chai';
import { expect } from 'chai';
import chaiAsPromised from 'chai-as-promised';
import sinon from 'sinon';

chai.use(chaiAsPromised);

describe("S3Gateway", () => {
  let awsStub;
  let sandbox;
  let writeObject;

  beforeEach(() => {
    sandbox = sinon.sandbox.create();
    writeObject = require('../../../app/lib/aws/s3gateway').writeObject;

    awsStub = sinon.stub().returns({
      S3: sinon.stub().returns({
        putObject: sinon.spy()
      })
    });
    sandbox.stub(window, 'AWS', awsStub);
  });

我在终端窗口中运行mocha时我在stdout中遇到的错误是:

$ mocha test/lib/aws/s3gateway.js --compilers js:babel-core/register


  S3Gateway
    1) "before each" hook for "should attempt to write json object to s3"


  0 passing (483ms)
  1 failing

  1) S3Gateway "before each" hook for "should attempt to write json object to s3":
     ReferenceError: window is not defined

必须从AWS对象获取window的原因是因为webpack捆绑了前端应用程序的aws-sdk。其他人遇到此问题并修复它?

1 个答案:

答案 0 :(得分:2)

mocha测试在node.js中运行,而node.js没有全局窗口变量。但您可以在测试中轻松创建一个:

global.window = {};

您甚至可以立即填写测试中的内容:

global.window = {AWS: /* insert your test data here*/ }

那应该这样做。

如果你需要一个更逼真的窗口,你应该考虑使用jsdom。