【问题标题】:mocha, sinon and stubbing out the window objectmocha, sinon 和 stubbing 窗口对象
【发布时间】:2016-05-18 18:23:49
【问题描述】:

我有一个 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 时在标准输出中不断出现的错误是:

$ 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

必须从 window 对象中获取 AWS 的原因是 webpack 为前端应用程序捆绑 aws-sdk 的方式。还有其他人遇到这个问题并解决它吗?

【问题讨论】:

    标签: webpack mocha.js aws-sdk sinon


    【解决方案1】:

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

    global.window = {};
    

    您甚至可以立即用您想要的测试内容填写:

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

    应该这样做。

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

    【讨论】:

    • 啊,global.window 是我所缺少的。让我试试看!谢谢!!
    猜你喜欢
    • 2016-10-11
    • 2017-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多