mocha、sinon 并删除 window 对象
mocha, sinon and stubbing out the window object
我有一个 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);
});
我在终端 window 的 运行ning 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 的方式。还有其他人 运行 解决这个问题并解决它吗?
mocha 在node.js 中测试运行,而node.js 没有全局window 变量。但是您可以轻松地在测试中创建一个:
global.window = {};
您甚至可以立即用您想要在测试中拥有的内容填充它:
global.window = {AWS: /* insert your test data here*/ }
应该就可以了。
如果您需要更真实的 window,您应该考虑使用 jsdom。
我有一个 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);
});
我在终端 window 的 运行ning 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 的方式。还有其他人 运行 解决这个问题并解决它吗?
mocha 在node.js 中测试运行,而node.js 没有全局window 变量。但是您可以轻松地在测试中创建一个:
global.window = {};
您甚至可以立即用您想要在测试中拥有的内容填充它:
global.window = {AWS: /* insert your test data here*/ }
应该就可以了。
如果您需要更真实的 window,您应该考虑使用 jsdom。