node.js - 如何在 Node.js 中导入带有窗口对象引用的 JS 文件?

标签 node.js unit-testing mocha.js

我有一个 JS 文件 code.js,它将加载包含如下代码的网站:

window.someObject = window.someObject || {};

window.someObject.someFunction= function(aCondition) {
  if (aCondition) someExternalObject.someFunc2();
};

setTimeout(window.someObject.someFunction, 1000);

我无法更改此代码。

我想为此编写一个单元测试,所以我的测试文件将如下所示:

const expect = require('chai').expect;
var rewire = require('rewire');
var codeModule = require('./path/to/file/code.js');

describe('Test code.js', () => { //Using Mocha.js
 //Stub someObject.someFunction
 //Test stub with expect()
})
//MORE CODE

这会导致 ReferenceError: window is not Defined 因为 Node.js 中没有 window 对象。

我想要导入该模块的原因是我想要模拟 someObject.someFunction 进行测试。

在使用 Node 进行测试时,如何处理对浏览器 API 的引用(例如窗口对象)? 我是否需要像 this 这样的包前?

我对此还很陌生,所以如果我有一些误解,请耐心等待。

最佳答案

在导入文件之前执行此操作。

window = window || {}

它将在全局命名空间中定义 window 对象,但当然不会有您在浏览器中获得的好东西。

关于node.js - 如何在 Node.js 中导入带有窗口对象引用的 JS 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60004035/

相关文章:

javascript - 如何获取在 Node 中调用函数的文件名和行号?

javascript - 动态切线

c# - 单元测试 : Add Record to Database

javascript - 当从同一个文件请求时,导出同一目录下的两个模块不起作用

typescript - 无法在 VSCode 中使用 TypeScript 运行 Mocha 测试

node.js - 在 Lambda 上查询 mysql 时任务超时

javascript - 为什么以下 JavaScript 函数不打印任何内容?

java - OOP分解和单元测试难题

ajax - 我如何模拟 polymer 核心 ajax,以进行单元测试

javascript - 使用 mocha 和 chai 测试数组输出