问题标签 [lab]
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.
hapijs - Hapi Lab 如何测试所有必填字段
有没有一种方法可以检查所有必填字段而无需测试每个字段。
验证规则
测试
javascript - 使用实验室测试 Hapijs API
我开始使用 Lab 来测试我的 API。API 执行通常的 CRUD 操作,我想知道我应该如何测试需要文档 ID 的 Update 和 Delete 方法。
我的 API 在内部返回新创建的 mongo 文档response.payload
。我不明白为什么在DELETE
测试resultId
中是undefined
.
这是我的代码:
node.js - `lab` 和 `code` 与 `mocha` 和 `chai` nodejs 库之间的比较
我是 node.js 的新手,我决定将 hapijs 用于我的 Web 和 API 实现。
但是,我发现 hapi 社区为测试和断言库构建和使用lab
and code
,它们是对mocha
and的重写chai
。
我很难找到这些库之间的差异。
我知道可以互换使用它们,但我想要更详细的比较,因为我想定义和遵守编码标准,而且我不喜欢库的混合和匹配,除非有正当理由。
任何反馈表示赞赏
node.js - 在 Hapi.js Lab 中如何正确覆盖这个测试用例?
我的 Hapi.Js 服务器中有文件上传 POST 点。这是代码:
}]);
如何正确覆盖此代码/点的“应返回上传的图像路径”的情况,而不会触及 DB 和 AWS?
javascript - Mongoose 模型单元测试 - 如果任何测试用例失败,连接将不会关闭
我正在使用 Lab 和Mockgoose为我的 Mongoose 模型创建一些单元测试,并且我正在通过 Labslab.before()
方法打开数据库连接,然后在 labslab.after()
方法中终止数据库连接。我遇到的问题是,如果任何测试用例失败,则连接不会关闭,但lab.after()
会执行(我添加了一些控制台输出进行调试)
所以如果我改变:
至:
然后它工作得很好。但是如果我模拟一个测试用例失败,那么“ Closing ”和“ Closed ”都会出现在控制台中,但连接本身永远不会关闭......它只是挂在那里直到我点击 ctrl+c
我在上面的代码中遗漏了什么吗?
更新
我查看了正在运行的进程,看看测试用例失败时是否有处理挂起:
javascript - Hapi.js 实验室测试结果不一致
我正在尝试使用注册功能测试 Hapi.js 插件:
我的测试文件在这里:
一切都很好,直到我添加了“使用现有用户名的 /register 端点”。
现在,lab 命令的后续调用成功退出,然后测试 5 和 6 失败(它像这样继续下去,一次成功,然后一次失败)。基本上,看起来结果状态代码在成功测试启动后被交换。
看起来像一个同步问题,但我找不到原因。有任何想法吗?
node.js - 在单独的文件中对 Mongoose 模型进行单元测试会导致问题(使用 Mockgoose & Lab)
每当 Mongoose 模型在加载后尝试加载时,都会引发错误,例如:
Account
错误:uncaughtException:编译后无法覆盖模型。日期=2016 年 2 月 26 日星期五 10:13:40 GMT-0700 (MST),pid=19231,uid=502,gid=20,cwd=/Users/me/PhpstormProjects/project,execPath=/usr/local/Cellar/节点/0.12.4/bin/node, 版本=v5.2.0, argv=[/usr/local/Cellar/node/0.12.4/bin/node, /usr/local/Cellar/node/0.12.4/bin /lab], rss=73306112, heapTotal=62168096, heapUsed=29534752, loadavg=[1.6005859375, 1.84716796875, 1.8701171875], uptime=648559 OverwriteModelError: 编译后无法覆盖Account
模型。
我很好,但是现在我正在为我的模型编写单元测试,我遇到了一个问题。
只是关于文件结构的一些基本信息......
我将所有 Mongoose 模型放在单独的文件中,位于src/models/
文件夹内,要加载这些模型,只需要求文件夹,将Mongoose
对象传递给它,src/models/index.js
文件将加载所有模型,并返回楷模。该index.js
文件可以在这里看到(与它无关,但模型名称基本上是文件名,没有.js)
现在,模型的单元测试也被分成单独的文件。每个模型都有一个测试文件。即使每个单元测试文件都关注一个特定的模型,其中一些也使用其他模型(用于之前/之后的任务)。
最初的问题
我刚刚创建了第二个单元测试文件,当我独立执行每个测试文件时,它们工作得很好。但是当我执行所有这些时,我收到上述错误,说明我正在尝试多次加载模型。由于我./models
在每个单元测试用例中都需要,因此我不止一次加载它们。
第一次解决尝试
我想也许我可以通过after()
在每个单独的单元测试文件中清除所有加载的模型,如下所示:
哪个根本不起作用(没有新错误,但是一旦编译错误仍然存在,就无法覆盖Account
模型)
第二次解决尝试(半成功)
当模型尝试返回时,模型不会在最后一行抛出错误,而是在模型Mongoose.model()
顶部插入一些逻辑,以检查模型是否已加载,如果已加载,则返回该模型对象:
我现在正在我的模型中尝试它,它似乎工作正常,(好吧意味着我没有得到上面列出的错误,说我正在多次加载模型)
新问题
现在,每当执行单元测试时,我都会收到一个错误,每个模型都会显示一次错误,但它是相同的错误:
在该堆栈跟踪中没有太多细节可以解决..
我不确定它是否是由我添加到每个模型中的代码引起的,检查它是否已经加载,如果是,它会在我执行单个单元测试时显示,或者它只会显示无法设置属性' 0' 未定义两次(一次用于成功的初始模型加载,然后两次用于接下来的两次......我想)
如果有人有任何意见,我将非常感激!谢谢
更新
我尝试运行lab --debug
以获取更多信息,虽然它没有显示出现的错误周围的任何堆栈跟踪,但它使它们加倍......这很奇怪。所以如果执行时有 2 lab
,则lab --debug
显示 4
另外,我使用Winston进行日志记录。如果我将日志级别更改为调试,这在控制台中显示了很多调试条目,它不会显示这些错误周围的任何条目......所以这让我认为这可能不是由我的脚本引起的,而是由某些东西引起的在单元测试依赖项中?
错误说它们来自error.js文件,但不要说太多。我试图通过 找到一个error.js find . -name 'events.js'
,但没有结果.. 奇怪
node.js - 如何让伊斯坦布尔报告 Lab/Hapi.js 测试的覆盖率?
编辑:几个月后我完全迁移到实验室,它工作得很好,包括覆盖范围。也许在我写这个实验室的时候没有一个好的覆盖工具。
我以前有这个工作。今天早上上班。突然,它不是。
测试在dist/test/unit.js
. 15 次测试,覆盖 80.29% 的代码(基于实验室的覆盖率报告)。但是我们已经准备好将伊斯坦布尔与声纳一起使用,所以我需要让它再次与伊斯坦布尔一起使用。无论如何,我更喜欢伊斯坦布尔的报道。
我正在运行测试:
./node_modules/.bin/istanbul cover ./node_modules/.bin/lab -- -l -e development -r lcov dist/test
测试运行。全部通过。屏幕输出是覆盖率报告:
为什么这告诉我没有收集到任何报道?我如何让这两个工具再次很好地配合使用?
摆脱-r lcov
并没有真正的帮助。./coverage
无论哪种方式,(默认文件夹)中都没有输出。我可以通过管道强制它,但是当我将该输出运行到伊斯坦布尔(报告选项)时,我得到Error: Invalid report format [coverage/cover.info]
似乎正在生成的覆盖率报告无效。我怎么会知道?
mongodb - server.inject with hapijs not return the correct response
I am trying to use Lab to test some code. However, for some reason when I put the right payload my code does nothing. The promise doesn't seem to get returned:
If I edit the code so that there is no payload or it doesn't match my Joi validation then it I get response:
I should mention that this code works when I run the server and test the api by hand. I can't figure it out.