赛普拉斯测试不会因模拟对象中的异常而失败

时间:2019-06-28 18:02:15

标签: cypress

我的测试包含以下内容:

it.only('does something', function() {
    cy.window().then(function(win) {
      win.GlobalObject = {
        someMethod: function(data) {
          return expect(data).to.deep.eq({
            company: 'Pied Piperz',
            country: 'United States'
          });
        }
      };
    });
    cy.get('[data-cy=submit]').click();
});

运行测试时,部分逻辑会调用window.GlobalObject.someMethod({}),这会导致测试失败,因为我没有将预期的对象传递给someMethod()。相反,我在日志中看到一个失败的断言:

但是总体测试被标记为成功:

我如何在模拟的GlobalObject中得到失败的断言,以使整个测试失败?

1 个答案:

答案 0 :(得分:0)

问题是您的测试在通过后就失败了。

一旦Cypress完成cy.get('[data-cy=submit]').click(),它就会执行所有命令,因此它认为您的测试已完成。

然后,几毫秒后,您的expect()失败了-但是赛普拉斯已经通过了测试,因此没有任何有意义的事情要做。

但是一切并没有丢失!您可以使用可选的done参数来手动告诉Cypress测试完成的时间,例如:

it.only('does something', function(done) { // <--- note `done` here
    cy.window().then(function(win) {
      win.GlobalObject = {
        someMethod: function(data) {
          expect(data).to.deep.eq({
            company: 'Pied Piperz',
            country: 'United States'
          });
          done(); // <--- this call tells Cypress the test is over
        }
      };
    });
    cy.get('[data-cy=submit]').click();
});