如何模拟“文档”对象在Meteor App中进行测试
How to mock "document" object for testing in Meteor App?
我使用摩卡和chai来测试我的Meteor应用程序,并有一个使用文档对象的模块。测试在服务器上运行,这当然会触发"文档未定义"。模拟文档对象或用使用文档的模块执行测试的好方法是什么?
我试过jsdom, jsdomify等,我也试过按照Meteor指南的测试部分进行集成测试和完整应用测试,但我还是卡住了。
任何建议或使用类似jsdom与meteor包的例子将不胜感激。
编辑-添加示例
这里有一个非常小的例子,我正在尝试做什么。我已经砍掉了它,以便在没有添加PhaserJS的情况下触发错误。然而,由于它是一个使用PhaserJS的项目,需要pixi和p2,所以很难告诉pixi/p2/Phaser需要对文档做什么。
/测试/game.test.js
import { chai } from 'meteor/practicalmeteor:chai';
import {Game} from '/imports/game.js';
var assert = chai.assert;
if(Meteor.isClient){
describe('Game', function () {
it('can add 2 + 3 and return 5 with addNumbers function.', function () {
//arrange
var game = new Game();
//act
var result = game.addNumbers(2,3);
//assert
assert.equal(result, 5);
});
});
}
/进口/docChanger.js
//simulates pixi
(function(){
var docChanger = {};
docChanger.canvas = document.createElement('canvas');
return docChanger;
}).call(this);
/进口/game.js
import docChanger from '/imports/docChanger.js';
export class Game {
constructor(){
this.docChanger = docChanger;
}
addNumbers(x,y){
return x+y;
}
}
我使用的是Meteor 1.4.1,并使用以下包:
practicalmeteor:摩卡
practicalmeteor:柴
因为无论如何您只在客户端上运行测试(您应该这样做,没有理由在服务器上运行它们),您可以简单地在测试文件中有条件地要求有问题的组件:
if (Meteor.isClient) {
var Game = require('/imports/game.js').Game;
describe( ...
从Meteor 1.3.3开始,也支持嵌套导入语句(如if (Meteor.isClient) { import {Game} from '/imports/game.js'; ...
),但我不鼓励这样做,因为这会导致eslint出现问题。
如果您真的真的需要在服务器端测试中运行使用document
的代码,您可以在全局命名空间中创建它并像这样模拟它的方法:
if (Meteor.isServer) {
GLOBAL.document = { createElement: () => {} };
}
这将允许调用document.createElement()
而不会出现错误。我想不出这种情况会有用,因为使用document
的代码无论如何都是在客户端上运行的,并且只在客户端上测试它应该是完全足够的。
- Meteor如何接收HTTP请求
- Meteor-将选定窗体中的对象添加到集合中
- Meteor上的启动页面
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- Meteor-添加用户自定义字段的方法不起作用
- Meteor忘记了密码的实现
- 链接所有<a>Meteor
- 在Meteor项目中安装并包含npm模块后出错
- Meteor JS中代码的重复使用部分
- Meteor Router数据函数被调用两次
- 基于localStorage的Meteor激活模板
- Meteor:全局常量未从app/lib/_constants.js中获取
- Meteor.js Facebook使用“Apple-mobile-web-app-able”登录
- Mongo DB 增量 if 语句(Meteor App)
- 调用()从我的app.meteor.com
- Meteor-App: Tracker is not defined
- 为Meteor App添加css框架
- 在Meteor App中控制器应该放置的位置
- Meteor Basic App: ReferenceError: Entries is not defined
- 如何模拟“文档”对象在Meteor App中进行测试