gpt4 book ai didi

javascript - 如何模拟 "document"对象以在 Meteor App 中进行测试?

转载 作者:行者123 更新时间:2023-11-28 21:26:33 30 4
gpt4 key购买 nike

我正在使用 mocha 和 chai 来测试我的 Meteor 应用程序,并且有一个使用文档对象的模块。测试在服务器上运行,这当然会触发“文档未定义”。模拟文档对象或以其他方式对使用该文档的模块执行测试的好方法是什么?

我尝试过 jsdom、jsdomify 等,我也尝试过按照 Meteor Guide 的测试部分进行集成测试和完整应用程序测试,但我被卡住了。

任何将 jsdom 之类的包与 meteor 一起使用的建议或示例将不胜感激。

编辑 - 添加示例

这是我正在尝试做的一个非常小的例子。我已将其砍掉以便在不添加 PhaserJS 的情况下触发错误。但是,由于这是一个使用 PhaserJS 的项目,需要 pixi 和 p2,因此很难说出 pixi/p2/Phaser 需要对文档执行的所有操作。

/test/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);
});
});
}

/imports/docChanger.js

//simulates pixi
(function(){
var docChanger = {};
docChanger.canvas = document.createElement('canvas');
return docChanger;
}).call(this);

/imports/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 并使用以下软件包:

  • 实用 meteor :摩卡咖啡

  • 实用 meteor :柴

最佳答案

因为无论如何你只在客户端运行测试(你应该这样做,没有理由在服务器上运行它们)你可以简单地在测试文件中有条件地要求有问题的组件:

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 的代码无论如何都是在客户端上运行的,而且只在客户端上测试它应该是完全足够的。

关于javascript - 如何模拟 "document"对象以在 Meteor App 中进行测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39111299/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com