问题标签 [chai-http]

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.

0 投票
1 回答
454 浏览

express - 如何使用 Chai 测试 Express API 到 404 的第 3 方端点?

我真的不知道该如何表达我的问题。但我可以解释发生了什么。

server.js(受影响的路由定义)

users.js(用户路由文件)

asyncMiddleware.js(捕获异步错误)

users.test.js

测试输出

jsonplaceholder.typicode.com当您提供超出范围的 id 时,网站实际返回的响应状态为 404。这就是 404 的来源,但为什么测试没有捕捉到它,而是从我自己的服务器发送 500?

如果我更改测试以检查状态 500,所有测试都通过,但我仍然Error: Request failed with status code 404在测试输出中。

顺便说一句 - 我还有 10 个其他测试通过,没有任何问题,这是迄今为止我的套件中唯一的一个。

0 投票
0 回答
53 浏览

mysql - 特拉维斯没有说明理由就失败了

我正在尝试通过 travis-ci 构建我的项目,但是当 travis 尝试通过 mocha 测试项目时发生未知错误。我知道问题不在于mysql,因为连接在那里并且脚本正在运行。

我正在测试使用 - ts-node/register - Mocha - Chai - Chai-http - mySQL(使用池)

该测试在本地运行良好,但在 travis 上却失败了。我在想它可能与 ts-node/register 相关,在 travis 中。

1 - 我已经尝试完全删除测试并且构建已修复。但是当我尝试测试它时,它惨遭失败。

包.json

.travis.yml

Travis 仓库 https://travis-ci.com/moh682/hbas-system-api

travis 暴露的错误仅此而已。

yyy@1.0.0 test /home/travis/build/xxx/yyy ENV='TEST' mocha -r ts-node/register test/{,dbMappers}/**.test.ts --exit;

xxx = 用户名 | yyy = 回购名称

0 投票
1 回答
657 浏览

node.js - package.json 中的 Mocha 测试路径参数

注意:我完全是 nodejs 的菜鸟。请以具有其他编程语言经验但创建他的第一个 nodejs 应用程序的人可以理解的方式解释您的答案 =)。

我正在尝试编写一个简单的测试应用程序,它应该根据 OpenApi 3.0 规范自动测试外部服务。

我整理了一些示例代码,以尝试针对使用 mocha 和 chai 实现 API 的外部服务自动测试 OpenApi 规范。

现在我的问题似乎是找不到我的 mocha 测试模块。

我收到以下错误消息:

我的 package.json:

test/client_all.test.js 中的小测试应用程序:

您能帮我弄清楚为什么路径无法解析,以及如何解决吗?如果您认为我做错了,也可以随意评论测试代码。

0 投票
0 回答
67 浏览

javascript - 未找到存根路由回调渲染路由状态

我有一条路线

controllerTest 返回当前时间作为查询结果

我的路线测试文件

测试失败,它告诉我在我存根回调后路由返回 404 而不是 200。

请注意,使用spy而不是stub工作。但在这种情况下,我需要使用stub

我错过了什么?

更新

存根回调时,出现错误cannot get /route,就像回调不存在一样。和执行一样app.get('/test')

任何人都知道如何存根回调?

0 投票
1 回答
15 浏览

mocha.js - 摩卡 - 为什么 before() 没有在它之前完成,我该怎么做?

我需要在之前调用 API 请求(发布lib.js)并检查其中的结果

无论我每次尝试什么都在完成之前执行,并且res变量是空的,正如您在输出的开头看到的那样 - 就在带有哈希标记的毫秒下方。

测试.js

lib.js

输出

0 投票
2 回答
484 浏览

node.js - Chai-http:无法设置节点 ctx.state 的值

我正在使用 NodeJS 和 KOA 创建一个 API。对于测试,我使用 chai (chai-http) 和 mocha。当我const { username } = ctx.state.user在控制器中使用来获取发送请求的用户的用户名时,就会出现问题。当使用我的应用程序(使用 Flutter)或使用 Postman 访问它们时,它可以工作,但是使用 mocha 运行测试时,我得到了错误TypeError: Cannot destructure property 'username' of 'undefined' or 'null'。调试代码时,我发现它ctx有一个键,state但该键的值是空的。我尝试了这些方法.set(...).send(...)但它们只修改了 and 内部ctx.request.header的值ctx.request.body

所以我的问题是:是否可以为ctx.statewith chai 设置一个值,如果可以,如何设置?我想放入类似的东西{user: {username: 'chai'}}

以下是2个主要部分,要测试的控制器部分和测试方法:

这是来自服务器索引和测试文件的完整代码:

0 投票
1 回答
909 浏览

node.js - Mocha 和 Chai 与 NodeJS,简单的服务器测试失败,404(应该是 200)

我使用 Mocha 和 Chai 编写了一个简单的测试。测试返回为failed. 更改到我正确的测试目录并运行npm test后返回的错误如下。请有人帮我弄清楚为什么 9000 已经在使用?

测试.js

hangman-server.js

我的 package.json 包括 mocha 和 chai

0 投票
2 回答
48 浏览

express - ExpressJS 服务器类 chaiHttp

我正在尝试编写一些基本测试

这是我的server.js

我喜欢类方法,因为它让我可以注入不同类型的配置。

这是我的index.js,我没有在测试中使用,但表明它server.js正在工作

最后是我的server_spec.js

我得到了TypeError: app.address is not a function,我查看了这个相关的 stackoverflow 问题,但我无法找出问题所在。因为我正在导出类并在测试中进行初始化。

0 投票
1 回答
221 浏览

node.js - 如何在 Node.js 应用程序上使用相互 SSL 和测试框架 Mocha/Chai(chai-http)

我正在开发一个使用相互 SSL 身份验证的应用程序,我想编写自动化测试来评估功能。

我已经实现了服务器,我可以用 Postman 进行测试。这个职位运作良好。

在我的摩卡测试中,我写了这个请求:

但是此请求不会向服务器发送任何证书:

  • request.socket.authorized = 未定义

我尝试使用 HTTPS 代理:

但是此请求不会向服务器发送任何证书:

  • request.socket.authorized = 未定义
  • 我在 mocha 测试中遇到 ERR_INVALID_PROTOCOL 异常

有人可以帮我吗?

0 投票
0 回答
198 浏览

http - chai-http 并不总是看到 ETag 标头,可能是由于 CORS?

我使用 mocha (6.2.2)、chai (4.2.0) 和 chai-http (4.3.0) 编写了一套测试来测试我们编写的微服务。有时,我们自己添加的 ETag 标头(首先使用 on-headers 侦听器删除“Express”标头)不会出现在收到的对 chai.request 调用的响应中。观察结果是:

  • 如果测试在与微服务相同的主机上运行,​​则收到的响应将始终具有所需的 ETag 标头;
  • 如果测试在与微服务不同的主机上运行,​​则收到的响应有时会有 ETag 标头;
  • 由于缺少 ETag 标头而失败的测试总是相同的(即使代码几乎相同);
  • 使用 POSTMAN 访问微服务 REST 端点总是正确返回带有 ETag 标头的响应;

从观察来看,我非常有信心我们的微服务很好。

这里开始

注意:在 Web 浏览器中运行时,同源策略仅允许 Chai HTTP 读取某些标头,这可能会导致断言失败。

(即使我们没有在浏览器中运行,我想这个原则仍然成立)。我尝试将 access-control-expose-headers 标头添加到微服务响应(包括 etag),但这并不能解决问题。

我有点假设这是一个 CORS 问题:其他可能性是 chai-http 不喜欢 etag 值;缺少 etag 的示例是:

但是,使用此值添加任意标头(例如“Blah”)始终会导致标头出现...

响应包括以下 CORS 标头:

(我也尝试添加 access-control-allow-headers 但这些似乎设置不正确:我认为这些在这里不相关)。

如果有人遇到与 chai-http/ETag/CORS 类似的问题并提出解决方案,我会很感兴趣?

迈克比尔