【发布时间】:2014-03-10 23:05:35
【问题描述】:
我的单元测试在 node.js 中运行(使用 mocha、chai 和 sinon)。我正在测试的代码是在浏览器中运行的。
一些代码全局定义事物,而其他代码期望有一个window 对象并将对象添加到window。 (具体来说,我使用 shim 来模拟 ES6 的 Promise 对象。)到目前为止,我已经通过添加 global.window = global; 来伪造窗口对象,这只能让我到目前为止。当我想为下一组测试拆除我的假环境时,问题就出现了。
我尝试在before() 或beforeEach() 函数中调用require(),并尝试在after() 或afterEach() 函数中手动删除创建的对象。每次都会发生两种情况之一。要么全局对象从一个测试 JS 文件持续到下一个测试 JS 文件,要么在所有测试中神秘地不存在全局对象。
我不确定这是否与 mocha 运行测试 JS 文件的方式或 require() 的工作方式有关,但我没有想法。以前肯定有人解决过这个问题吗?
【问题讨论】:
-
"我正在测试的代码是在浏览器中运行的" 那么为什么不在浏览器中运行呢?或者这是一个愚蠢的问题?
-
@RobG 能够跳过浏览器减轻了测试套件的负担。
标签: javascript node.js unit-testing mocha.js sinon