问题标签 [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 回答
2075 浏览

node.js - Chai-Http 总是返回 404 错误码

所以基本上,我使用 Typescript 将这个 rest api 从 Node 和 Express 中注销。我正在尝试使用 chai、chai-http 和 mocha 来测试 api 端点。但是无论运行哪个测试,我总是找不到 404。这是我的代码:

应用程序.ts:

路线.ts:

user.spec.ts:

不仅如此,而且我尝试的任何路线,我都会收到 404 错误。我在这里做错了什么?

编辑:希望没关系,但我使用 mocha 来运行测试。

0 投票
1 回答
423 浏览

javascript - 使用 chai-http ping 一个 express + sequelize 服务器

我在使用 Express 和 Sequelize 设置测试时遇到问题。我正在使用 Mocha + Chai 进行测试。我现在只是在尝试 ping。

server.js 代码:

服务器正在工作。

和 test.js :

我相信至少部分问题是我的服务器正在返回一个包含 express 应用程序的 sequelize 实例,这可能不是通常的情况。虽然,续集只是我在我的 chai 测试中等待的一个承诺,使用then而不是end.

这是我得到的错误:

/GET (node:35436) UnhandledPromiseRejectionWarning: AssertionError: expected { Object (domain, _events, ...) } 的状态码为 200,但在 chai.request.get.then (/Applications/MAMP/htdocs/api_dickson/) 获得 404 app/routes/index.test.js:16:23) at process._tickCallback (internal/process/next_tick.js:188:7) (node:35436) UnhandledPromiseRejectionWarning: 未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。(拒绝 id:1)(节点:35436)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。执行(默认):

0 次通过(2 秒) 1 次失败

1) /GET 应该显示欢迎消息:错误:超过 2000 毫秒的超时。对于异步测试和钩子,确保调用了“done()”;如果返回 Promise,请确保它已解决。

不需要告诉你我是从那些测试的东西开始的(最后......),因此,我还没有得到所有东西。非常感谢你的帮助 !

帕姆

0 投票
2 回答
11019 浏览

node.js - 如何在使用 mocha 和 chai 的测试之间正确关闭 express 服务器

我正在寻找一种正确的方法来在测试之间完全重置我的快速服务器!看来这不仅仅是我的问题,很多其他用户也问过同样的问题,而且很多博文都在讨论这个问题。建议的解决方案对我来说既不奏效也不令人满意。这里有另一个类似的问题和一篇文章很好地描述了这个问题并提出了一些解决方案:

运行茉莉花规格后关闭快速服务器的堆栈溢出

博客: https ://glebbahmutov.com/blog/how-to-correctly-unit-test-express-server/

这里专门创建了一个包来解决这个问题: https ://www.npmjs.com/package/server-destroy

现在,一个最小的工作示例来重现我的情况。在被测代码中,创建了一个快递服务器;当在某个端点上调用时,服务器会增加一个值并返回它:

测试包含两个相同的测试用例;他们都在端点上调用服务器,并检查返回的值。 before_eachafter_each部分是为了确保在运行单个测试用例之前创建新连接,然后关闭,以确保两个测试用例之间的独立性:

测试失败,因为服务器在第一次测试后没有运行。请注意,在after_each部分中,我为完全丢失的最后一个服务器实例强制进行了缓存清理。如果运行单个测试用例,则测试成功:

我使用的配置:

  • 节点 8.11.1
  • 快递:“4.16.3”
  • 摩卡 5.0.5
  • 柴4.1.2
  • 柴-http 4.0.0

我怎么解决这个问题?错误信息是什么意思?

0 投票
1 回答
115 浏览

mongoose - 错误:超过 2000 毫秒的超时。如果返回 Promise,请确保它已解决。即使用 return 替换 done() 仍然不起作用

我知道我可以使用异步或回调,但承诺不应该也起作用吗?

我的研究表明,我需要做的就是使用 return 代替 done(); 所以我这样做了,到了我可能有太多回报的地步。

虽然仍然收到 2000ms 错误。

我将这些转换为回调(使用 done())并且它确实工作正常,但我只想知道我在这里的承诺哪里出错了。

0 投票
1 回答
1312 浏览

node.js - 如何测试在节点中调用另一个外部 API 的 API

我正在使用 mocha、chai 和 chai-http 来测试我的简单 API,该 API 将调用从 Slack 路由到 Habitica,集成了这两个服务。

我试图从创建测试开始,但我遇到了这个问题:当我调用我的 API 时,代码在外部 API 调用之前返回。这是测试的代码:

这是测试调用的代码:

此代码在调用 Habitica 返回任何值之前返回。这是“npm test”的结果:

我已经在很多论坛和网站上搜索过:

  • 有人说我不应该测试我不拥有的代码:这很有意义,但是我应该测试什么,因为它只是一个简单的集成服务?
  • 有人说我应该模拟外部 api 结果:但我不会测试任何东西,因为它只是一个集成。

我该如何解决这个问题?

提前致谢。

0 投票
1 回答
286 浏览

node.js - 使用 chai-http Node Js Express 处理中间件

我面临的问题是我正在使用 chai-http 测试一个 api,但它在中间件中出现意味着它不调用 next() 函数。不知道如何处理这个,小指南可能对我有很大帮助。这是我的代码,它可以帮助您更好地理解。

中间件

API

测试用例

0 投票
1 回答
65 浏览

javascript - 定义辅助链函数

我经常在授权的情况下执行 chai 请求:

我想在一个名为 的函数中分解自动化withAuth,这样我可以更方便地重用它:

但我不知道该怎么做?我试过了:

但这不起作用。

0 投票
1 回答
1366 浏览

javascript - 钩子前的摩卡不适用于 chai-http

这是我的测试代码。我正在测试一个 API。问题是“after”钩子正在工作并在测试结束后删除数据库。但是“之前”钩子不起作用。这里有什么问题?我试过但无法找出问题所在。我试图只用一个虚拟测试来运行 before 钩子,比如在控制台中记录一些东西。也没有用。

0 投票
1 回答
230 浏览

javascript - 使用 chai-http 进行测试时,异步函数未在服务器中执行

我的 app.js 中有以下功能

memorycache.init是一个异步函数,其中数据从数据库中填充

当我尝试进行 chai-http 测试时,memorycache.init在测试运行后执行导致错误

输出是 400 错误,之后 memoryCache 被初始化。

我该如何纠正这个?

整体测试:

describe(('Api- CreateJob'), () => { let url = '/v1/job' let testSRJob = getTestJob()

输出:

0 投票
0 回答
251 浏览

node.js - chai-http - res.json 从单元测试调用时不是一个函数

我有一个节点应用程序,它使用 express 公开一个简单的 REST api。它包括一个 GET 端点,它应该从 mongo 数据库返回一个 JSON 数据数组。从 Postman 测试时,它可以完美运行。

我想以编程方式对其进行测试,因此使用 chai-http 设置了测试:

});

但是,在测试期间我收到错误:

在 GET 处理程序中检索到数据并准备好发送回调用方的位置。

我无法理解在 Postman 中测试此端点和通过单元测试之间的区别。我已经逐步完成了代码,并且在两个测试(邮递员和单元)res中都是 aServerResponse并且reqIncomingMessage.