cypress 支持软断言吗?

2024-03-29

cypress 支持软断言吗?例如 - 我正在浏览“n”个元素并想要验证它们的值。如果任何元素的值不匹配,则测试失败。它不会继续验证下一个元素的值。有没有办法验证所有元素值并在最后显示失败的值?


EDIT:我可能误解了..如果你的意思是软断言cy命令(不是 chai 的expect/assert),那么这个答案不适合你。

WTBS,您可以使用以下解决方案并执行类似的操作:

describe('test', () => {

    const { softExpect } = chai;

    it('test', () => {
        cy.document().then( doc => {
            doc.body.innerHTML = `
                <div class="test">1</div>
                <div class="test">2</div>
                <div class="test">3</div>
            `;
        });
        cy.get('.test').each( $elem => {
            softExpect($elem[0].textContent).to.eq('2');
        });
    });
});

你可以做这样的事情。

support/index.js

let isSoftAssertion = false;
let errors = [];

chai.softExpect = function ( ...args ) {
    isSoftAssertion = true;
    return chai.expect(...args);
},
chai.softAssert = function ( ...args ) {
    isSoftAssertion = true;
    return chai.assert(...args);
}

const origAssert = chai.Assertion.prototype.assert;
chai.Assertion.prototype.assert = function (...args) {
    if ( isSoftAssertion ) {
        try {
            origAssert.call(this, ...args)
        } catch ( error ) {
            errors.push(error);
        }
        isSoftAssertion = false;
    } else {

        origAssert.call(this, ...args)
    }
};

// monkey-patch `Cypress.log` so that the last `cy.then()` isn't logged to command log
const origLog = Cypress.log;
Cypress.log = function ( data ) {
    if ( data && data.error && /soft assertions/i.test(data.error.message) ) {
        data.error.message = '\n\n\t' + data.error.message + '\n\n';
        throw data.error;
    }
    return origLog.call(Cypress, ...arguments);
};

// monkey-patch `it` callback so we insert `cy.then()` as a last command 
// to each test case where we'll assert if there are any soft assertion errors
function itCallback ( func ) {
    func();
    cy.then(() => {
        if ( errors.length ) {
            const _ = Cypress._;
            let msg = '';

            if ( Cypress.browser.isHeaded ) {

                msg = 'Failed soft assertions... check log above ↑';
            } else {

                _.each( errors, error => {
                    msg += '\n' + error;
                });

                msg = msg.replace(/^/gm, '\t');
            }

            throw new Error(msg);
        }
    });
}

const origIt = window.it;
window.it = (title, func) => {
    origIt(title, func && (() => itCallback(func)));
};
window.it.only = (title, func) => {
    origIt.only(title, func && (() => itCallback(func)));
};
window.it.skip = (title, func) => {
    origIt.skip(title, func);
};

beforeEach(() => {
    errors = [];
});
afterEach(() => {
    errors = [];
    isSoftAssertion = false;
});

在你的规范中:

describe('test', () => {

    const { softAssert, softExpect } = chai;

    it('test', () => {
        cy.wrap([1, 42, 3]).then( vals => {
            vals.forEach( val => {
                softAssert(val === 42, `${val} should equal 42`);
            });
        });
    });

    it('test2', () => {
        cy.wrap([2, 5, 4]).then( vals => {
            vals.forEach( val => {
                softExpect(val).to.eq(42);
            });
        });
    });
});

柏树日志:

终端(无头运行):

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cypress 支持软断言吗? 的相关文章

随机推荐

  • 在 Blazor 中获取子组件列表的最佳方法

    我们需要获取子组件列表OnAfterRenderAsync父组件的方法 但是我们不知道该怎么做 我们尝试与RenderBuilder and GetFrames但这始终为空 我们有 Splitter 组件 其中 N 个分割区域作为子组件 我
  • 使用 Plist 字典进行应用程序设置

    我希望能够使用 plist 来进行我在应用程序中实现的设置 我想要一个字典 Settings 来保存我的数组 例如 Debug Option 1 Option 2 等 如何访问 Settings 字典下的 Debug 数组 NSArray
  • 导出存档时出错

    我在 Xcode 中使用导出功能时遇到问题 您的帐户已经有分发证书 所以我使用了解决方案xcodebuild 它生成 IPA 文件 但我在控制台中看到 Checking original app usr bin codesign verif
  • 从静态 JSON 加载内容 Next JS

    我有一个 Next JS 项目 其静态 JSON 放置在 pages api data json 中 如下所示 Card title Title 1 content Content 1 title Title 2 content Conte
  • 我可以与 scipy 的 odeint 集成,直到找到局部最大值吗?

    这是我在这里提出的第一个问题 所以请放轻松 我想知道是否有一种方法可以仅在找到指定变量的局部最大值之前集成 ODE 系统 以下是更多细节 我们称我们的 ODE 系统为dX dt F X where X t x1 t x2 t xn t 假设
  • 实体框架更新实体以及子实体(根据需要添加/更新)

    我之间存在多对多关系Issues and Scopes在我的 EF 上下文中 在 ASP NET MVC 中 我打开一个编辑表单 允许用户编辑特定问题 表单底部是一个复选框列表 允许他们选择适用于此问题的范围 当编辑一个问题时 它可能总是已
  • 选择所有直到第一次出现字符

    如果我有数据 其中 a 之前的字符数 总是不同的我怎么写SELECT语句来获取所有字符直到管道字符 样本数据 asdf adkfdll dd asdkdkdk da d WITH T C AS SELECT asdf adkfdll dd
  • 使用大型预编译头文件时 cc1plus.exe 崩溃

    我在使用 MinGW 预编译头文件时遇到问题 编译器似乎找到了预编译头文件 但 cc1plus exe 之后立即崩溃 cc1plus exe 已停止工作 我知道这可能与 cc1plus exe 的堆栈大小较低有关 因此我执行了以下操作来增加
  • 如何取消屏蔽 JavaFX 密码字段或正确屏蔽文本字段?

    在我的用户界面中 我有一个密码字段 http docs oracle com javafx 2 api javafx scene control PasswordField html像这样 呃 最下面那个 我希望用户能够选中您在图片中看到的
  • 更改 window.location.ancestorOrigins

    有什么办法可以改变或阻止使用window location ancestorOrigins在 Chrome 下的 iframe 网站中 出于安全原因 我不希望 iframed 页面能够检测到顶部 url 在 Firefox 下 如果指向另一
  • XCode 4 存档错误:找到一个或多个 PCH 文件,但它们无效

    在此记录一个奇怪的 XCode 4 错误以供将来参考 找到一个或多个 PCH 文件 但它们无效 清理并不能解决问题 您需要通过按住 ALT 并从菜单中选择产品来清理构建文件夹 清理 条目现在已更改为 清理构建文件夹 这将擦除不良的 PCH
  • 对project.json中的依赖关系感到困惑

    在project json 文件中 我们有一个依赖项部分 然后我们还有一个框架部分 其中每个框架下可以有更多依赖项 我很困惑为什么有时依赖项需要放在框架部分而有时需要放在主要依赖项部分 例如 在我的几个项目中 我在 dnxcore50 下有
  • Google Maps API v3 For 循环问题

    也许我完全偏离了我想做的事情 但我很想回到版本 2 因为我可以轻松地工作 但我希望对移动设备友好 我正在尝试生成一些标记 为了保存代码 我将标记生成放入 for 循环中 该循环循环遍历标记数组 有实际值而不是 long lat x x x
  • SELECT FOR UPDATE 在 MySQL 中保存整个表而不是逐行保存

    我将让多个客户端将数据输入数据库 并且我必须确保事务不会混合在一起 我在文档中读到START TRANSACTION and SELECT FOR UPDATE锁定它读取的每一行 SELECT FOR UPDATE 读取最新的可用数据 并在
  • 在多个编辑器之间共享 Quill 工具栏

    与伟大的Quill http quilljs com Javascript 的富文本编辑器 我试图让两个或更多编辑器共享同一个工具栏 我想 从文档 http quilljs com docs api 目前这是不可能的 所以我试图通过 API
  • 将 AngularJs 1.5 升级到 1.6 - $compile reg 控制器实例的更改会影响哪些具体绑定?

    文档 https docs angularjs org guide migration migrate1 5to1 6 ng services 24compile从 AngularJs 1 5 升级到 1 6 时 compile 的变化如下
  • 尝试从屏幕+麦克风录制流时收到“DOMException:由于关闭而失败”

    我正在构建一个扩展程序 它也可以记录我的屏幕和麦克风音频 概述 我有 content js 尝试访问navigator mediaDevices getUserMedia 接下来我向background js发送消息 它再次尝试访问navi
  • Swing - MaskFormatter - 从文本字段右侧输入数字

    我是 Swing Java 开发的新手 有人可以帮我解决这个问题吗 我有一个带有 maskformatter 的 jformattedtextfield 它工作得很好 但我唯一想知道的是我们是否可以使其从右侧输入数字 下面的代码可以很好地从
  • jQuery 过滤器:包含链接(a href="#")

    我有一个当前的链接 a href 但很快客户就会将链接更改为 a href something 当链接变成某种东西时 我想使用 jQuery 来更改 css 但我不知道如何为属性编写过滤器 href 您可以使用以下两个选项来比较您的href
  • cypress 支持软断言吗?

    cypress 支持软断言吗 例如 我正在浏览 n 个元素并想要验证它们的值 如果任何元素的值不匹配 则测试失败 它不会继续验证下一个元素的值 有没有办法验证所有元素值并在最后显示失败的值 EDIT 我可能误解了 如果你的意思是软断言cy命