开发者问题收集

Cypress 不匹配路线

2019-01-11
6250

我正在尝试编写一个模拟慢速 API 的 Cypress 测试,因此在阅读了一些文档后,我想到了这个:

before(function() {
    cy.server({delay: 5000});
});

beforeEach(() => {
    cy.route({
        method: "GET",
        url: "**/api/**"
    });
    cy.visit("http://localhost:9000");
});

这应该会为所有对 API 的请求添加 5 秒的延迟,对吗?

我看到的问题是,即使有大量对 */api/* 的调用,它也无法匹配任何请求。 Cypress GUI 确实可以看到路线……它只是不匹配。

这可能是什么原因造成的?

3个回答

如果您输入整个路线,如 cypress 日志中所示,您可能会发现它有效。

minimatch 似乎没有很好地实现前瞻通配符。它在 / 字符上可以很好地分隔,但在 ?# 上却不太好,因此如果您尝试容纳查询字符串,这可能是您遇到困难的地方。

您可以在控制台中使用 Cypress.minimatch 来查看发生了什么。有关如何执行此操作的更多信息,请参阅 文档

Cypress 还将接受正则表达式。像 /\/api\// 这样的代码应该适合您。

marrs
2019-02-18

对我来说,我的模式对于我的 POST 请求是正确的,但问题是我没有覆盖默认响应。我只是希望 API 会返回 500 错误,但除非我指定响应,否则它会调用真正的 API 端点。文档说默认响应是一个空对象,但由于某种原因,除非我提供一个值,否则它会调用。一旦我提供了响应,Cypress GUI 就会显示它正在正确地终止调用。

将其从:

cy.route({
    method: "POST",
    url: /my-endpoint/,
    status: 500,
});

更改为

cy.route({
    method: "POST",
    url: /my-endpoint/,
    response: {},
    status: 500,
});

对我来说是有效的。

Greg Van Gorp
2020-05-05

我假设您的匹配器不起作用,并且您的请求未显示 (XHR STUB)

如果您使用的是 GUI,您应该会看到类似这样的请求

(XHR) GET 200 /YOUR_API/YOUR_ROUTE

复制 (/YOUR_API/YOUR_ROUTE) 并且它应该匹配

在您存根后,如果应该显示 (XHR STUB)

在此处输入图像描述

Maccurt
2019-01-11