问题标签 [nodeunit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
eclipse - 配置 Eclipse Node JS IDE (Enide) 以运行 nodeunit
我正在使用 Enide,一个用于 Node-JS 开发的 Eclipse IDE,和 nodeunit,一个类似 JUnit 的测试框架。我需要如何配置 Enide,才能在 Eclipse 上下文菜单中看到“Run as XUnit-test”条目?
nodeunit - 仅在所有测试运行后执行的 tearDown() ?
我正在尝试在 NodeUnit 中编写一些集成测试。我的测试工作正常,但测试运行程序挂起,因为knex保持 PostgreSQL 数据库连接打开。
我可以通过调用knex.destroy()
my来释放它tearDown
,但不幸的是,我的测试套件的其余部分(以及其他文件中的测试)不再可以使用数据库。
在所有测试运行后,有没有办法实现tearDown
只运行一次?
node.js - require() 在单元测试期间总是返回相同的模块实例
有没有办法告诉测试框架(nodeunit、mocha、应该)为每个测试重新加载“必需”模块?
我对我的模块进行了多次测试,我发现由于 Node 的模块系统在第一次缓存模块时require()
,后续的测试运行会遇到同一个对象(使用它的旧状态,包括注入的模拟对象,这些对象不再适用于下一个测试套房。)
所以发生的事情是 TDD 促使我创建了一个模块,例如:
我的第一个测试为 dep1 注入了一个模拟;下一个测试为 dep2 注入一个模拟。但是由于require()
总是返回我模块的相同实例,第二个测试的模拟永远不会被正确注入。测试都在同一个被测对象上运行,这很糟糕。
一种解决方案是重新设计模块以支持“新”,并每次返回一个新实例。在我走这条路之前,有没有办法强制模块在测试环境中重新加载?
javascript - NodeUnit - 测试异步函数
我想测试一个异步函数返回的结果nodeunit
。我有以下测试:
但是当我运行它时,我收到以下错误:
如果我将assert.done();
调用移到回调函数之外,则测试会在 AJAX 调用之前结束。
我还尝试assert.expect(3);
在测试的最开始添加以使其“等待”直到回调函数调用assert.done();
,但我得到与上面相同的错误。
在所有情况下,预期#####
都不会明显地输出到控制台。我究竟做错了什么 ??
node.js - Windows中的Nodeunit调试
我正在尝试在运行 nodeunit 时调试测试,并尝试在此 SO Question中进行解释,但是在尝试时它在 Windows 中不起作用。
我在 Windows 中尝试这个并且 node_path 在系统变量中。
javascript - 通过 gulp 将 babel 管道传输到 nodeunit,而无需将转译文件写入磁盘
我正在尝试在支持 ES6 功能的情况下运行 nodeunit 测试。为了使功能支持更广泛,我使用Babeljs transpiler。
问题是我不想将编译后的文件写入磁盘,我只想将它们传递给 nodeunit 任务。如果我删除pipe(gulp.dest("/dev/null"))
它似乎pipe(babel())
什么都不做,或者只是在虚空中的某个地方输出。什么时候gulp.dest
到位一切正常,除了它写入我不需要的文件。那么,是否可以避免转译文件写入?如何?
PS我知道以下方法,但它们不适合我:
- 我可以使用 io.js 获得更广泛的 ES6 支持
- 我可以在运行测试后删除文件
javascript - 用模拟函数替换 nodejs 模块中的函数
我正在 nodejs 中创建一个小项目,它是 API 的包装器。我正在使用nodeunit编写一些单元测试,并且需要将各种模拟函数注入到模块中(例如,一个模拟向服务器发出 HTTP 请求并输出各种不同响应以测试我的代码的函数)。
我的问题是如何将这些功能注入到我的模块中?
我已经确定了两种理论上应该起作用的方法,如下所示:
方法一
重命名我要替换的模块的文件夹并添加一个包含我要注入的代码的新文件夹,例如:
执行测试后,我会做相反的事情:
这似乎很老套,即使理论上应该可行,我也不想尝试。
方法二
这是我使用模块初始化的首选方法。我的模块采用一个 JSON 对象,该对象可以包含如下各种选项:
我计划向这个名为“_testing”的 JSON 对象添加一个键,其值为包含各种函数的 JSON 对象,例如:
在我的模块中,我可以执行以下操作:
- 如果 this._testing 存在并且是一个 JSON 对象
- 循环这个._testing
- 对于 this._testing 中的每个键
- 将与键同名的函数替换为其值,例如
有没有更好的方法来注入/替换我的模块中的函数以进行测试?
javascript - 测试失败时,TravisCI 没有使我的构建失败
我有用 JavaScript 编写的测试,我使用TravisCI进行测试。
设置
我package.json
是这样的:
我.travis.yml
的是:
'testsRunner.js' 是:
最后suite1/test.js
是:
来自特拉维斯的日志
这是来自 Travis 的构建日志和测试执行:
问题
问题是test1
成功并且test2
不通过。在test2
抛出异常之前,这使 Travis 将我的构建报告为失败。
但是现在我修复了测试,所以test2
不会抛出异常,但它的断言失败。然而,Travis 将该构建报告为通过,而它应该将其报告为失败的构建。
如何处理?
编辑
我像这样改变了我的跑步者:
好吧,在日志中我可以看到它Done!
显示在一切之前,之后我可以看到每个单独的测试日志和堆栈跟踪。这些测试是否有可能正在执行异步,这导致主进程以0
状态退出?
固定的
按照克里斯贝克的建议,我改变了跑步者这样的:
javascript - 如何比较多个 GET 请求全部完成后的响应
我想确保每次我发出特定的获取请求时,我都会为名为spells
. (旁注:我还将编写一个不同的测试,以确保身体的另一部分active_spell
至少在某些时候是随机的/不同的)。我编写了以下代码,但似乎无法进入“数据”或“结束”事件。
那么为什么我没有进入“数据”和“结束”事件呢?
真正的主要问题是,是否有更合适或更有效的方法来实现我的主要目标,即确保法术书每次返回相同?
注意:我不介意查看库来帮助解决这个问题,但我正在寻找一种无需添加更多内容的方法来做到这一点。
node.js - 使用 Sinon 时,如何替换 stub 实例中的 stub 函数?
如果我创建了一个实例 var a = sinon.createStubInstance(MyContructor)
。
如何替换其中一个存根函数,例如var stub = sinon.stub(object, "method", func);
.
我这样做的主要原因是想要实现上述提到的多个回调解决方法