问题标签 [nock]

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 投票
0 回答
1854 浏览

node.js - 如何在节点中创建请求和响应对象

我正在尝试为我的节点/快递处理程序模拟请求和响应对象。我尝试了一些模拟库并遇到了 API 兼容性问题,这使得它们对于测试目的来说太不可靠了。

我想做的是自己创建原始请求和响应对象,并将输出定向到实时连接以外的地方。

这是我到目前为止所拥有的:

下面是一些测试代码:

我的处理程序正在将流数据源传递给响应:

当我在浏览器中加载请求时它工作正常,但我的测试超时,因为响应end事件永远不会被触发。我应该注意,我的处理程序中有正在测试的日志记录语句,并且它一直完成到最后。

更复杂的是,我使用 nock 来模拟一些 API 请求。我必须添加以下内容以防止出现错误:

但是,该 nock 回调实际上从未被调用过。但是如果没有此代码,即使我不使用 https,我也会收到该错误。我的站点的实时版本将所有流量重定向到 https,因此可能正在建立实时连接,但是为什么我的处理程序正在执行?

0 投票
1 回答
116 浏览

javascript - 在实习生上装载诺克

我试图在我的测试中使用 nock ( https://github.com/node-nock/nock )。

如果我写var nock = require('nock');它不会找到它,因为它没有加载。

我已经在loaderOptions中添加了包,现在我必须放入var nock = require('nock/index');,因为如果我编写require('nock')它会尝试加载node_modules/nock/main,但它不存在。

该库尝试在内部加载一些诺克带来的模块,但实习生说Error: Attempt to require unloaded module lib/recorder

我在包中添加了 nock:{ name: 'nock', location: 'node_modules/nock' }

有什么线索吗?

谢谢。

0 投票
1 回答
2740 浏览

javascript - 如何使用 nock 记录对文件的请求和响应,并在 mocha 验收测试中使用它来回放?

我继承了一个没有测试的 typescript@2 项目。

它基本上是一个 cli 任务运行器,一个任务多次请求外部 api 以创建文件。作为第一个故障保险,我想设置验收测试。

因此,我想模拟对外部 api 的调用并从本地文件中获取响应。我该如何做到这一点?

我已经研究了 nock,因为它似乎提供了这个功能,但是我该如何使用它呢?

(我没有提供示例,因为我打算自己回答我的问题,因为我最近刚刚经历了整个考验。)

0 投票
2 回答
4075 浏览

node.js - 如何让 Nock 和 Mocha 配合得很好?

我正在尝试使用 nock 来拦截/模拟我的应用程序中的一些 HTTP 流量以进行测试。我们的应用程序向我们的另一个站点进行身份验证,我需要 nock 来模拟 HTTP 200(带有 JSON 数据)和 HTTP 401(没有数据)来测试用户登录或未登录时的行为(分别) .

我有两个测试在单独运行时都可以正常工作,但是如果我运行整个测试套件,其中一个总是失败。我意识到 nock 是共享状态,因为它修改了 node.js 本身处理网络流量的方式,我认为这是竞争条件的原因,但我不能是唯一一个曾经为同一个请求使用两个不同的 nock 拦截器的人两个不同的测试,所以我知道我错过了一些东西。

谁能帮我弄清楚为什么这些测试会相互影响?

我的问题与如何使用 Mocha 和 Nock 重新测试相同的 URL 有关?但我做了那里建议的事情,但他们没有帮助。

我的测试文件(同样,如果单独调用它们都可以正常工作,但在作为同一测试通过的一部分运行时会失败)如下所示:

0 投票
1 回答
1390 浏览

reactjs - 如何正确测试反应组件方法

为了我的工作,我已经在 React 中开发了一段时间,但最近我被要求使用伊斯坦布尔让一些应用程序达到 ~100% 的测试覆盖率。在过去的几天里,我已经为这个应用程序编写了 160 多个测试,但我无法覆盖我的代码的某些部分。在涉及 AJAX 调用、setTimeout 回调和需要另一个组件才能正常运行的组件方法时,我遇到了最大的麻烦。我已经阅读了几个 SO 问题无济于事,我相信那是因为我错误地处理了这个问题。我正在使用 Enzyme、Chai 断言、Mocha、Istanbul coverage、sinon for spies,并且正在考虑 nock,因为我无法让 sinon fakeServer 工作。

这是有问题的组件方法:

}

这是该组件的测试:

sdk 只是一个使用 getJSON 构造 jQuery API 调用的模块。我的测试涵盖了函数调用,但它没有涵盖此处看到的 .done 回调:在此处输入图像描述 所以我的问题是,我怎样才能正确测试 .done?如果有人有文章、教程、视频以及任何解释如何正确测试组件方法的内容,我将不胜感激!

第二个问题是,我该如何测试一个作为道具传递给子组件的方法?根据测试覆盖率要求,我必须对该方法进行测试,但其唯一目的是传递给子组件以用作 onClick。这很好,但是 onClick 依赖于另一个 AJAX 调用在子组件中返回数据。我最初的冲动是只使用酶 .find 来定位 onClick 并模拟点击事件,但是带有 onClick 的元素不存在,因为 AJAX 调用没有在测试环境中带回数据。如果你已经读到这里,我向你致敬。如果你能帮忙,我谢谢你!

0 投票
1 回答
733 浏览

javascript - Nock 正在拦截我的请求,但我的 AJAX 请求出错了

我正在测试使用以下命令发出的 AJAX 请求XMLHttpRequest

所以我使用 Nock(和 Mocha)设置了一个测试:

当我运行这个测试时,xhr.onerror()会触发,而不是xhr.onload(). 但是,通过观察 Nock 从调用到 的输出log(),我确定 Nock 正在拦截我的 AJAX 请求,并且拦截的请求与 Nock 的预期 URL 匹配。

为什么在我的测试中xhr.onerror被调用而不是被调用?xhr.onload

0 投票
1 回答
566 浏览

node.js - nock:有没有办法得到 unsatisfaedMocks 的列表?

我想要这样的代码:

可能吗?

0 投票
1 回答
1706 浏览

reactjs - Nock 不能与 axios 一起使用获取操作异步测试

我正在尝试在 redux 测试我的异步操作,但我没有得到它。

我正在使用 nock 和 axios,所以我试图从 axios get 接收响应数据来测试我的操作:

这是我的行动:

但我在 console.log 收到此错误:

我从 Dan Abramov 那里找到了这个答案: How to unit test async Redux actions to mock ajax response

https://github.com/reactjs/redux/issues/1716

有谁知道如何使用 redux-thunk.withExtraArgument 进行测试?

提前致谢。

0 投票
1 回答
432 浏览

javascript - Repeating nock responses indefinitely

The mocking framework Nock.js removes responses after answering them. There is a feature to repeat a response n times, but is there something I can do if I want it to respond to a certain request with the same response every time it is called?

0 投票
1 回答
1367 浏览

unit-testing - Nock 拦截请求但返回空对象

我正在使用mocha作为测试框架,并且我正在尝试模拟一个DELETE使用fetch针对返回 HTTP 状态代码的端点的请求204

这是测试代码:

这将返回以下输出:

如您所见,请求被正确拦截,如 thelog()isDone()nock 方法所述,但是response返回的对象是一个空对象,因此无法对返回的 HTTP 状态代码进行断言(在此示例中204

知道我在这里可能缺少什么吗?为什么该reply()方法返回一个空对象?

更新

这是该方法的代码logout,该方法是使用HTTP 方法的请求remove的包装器。fetchDELETE