尽管cy.on('uncaught:exception',赛普拉斯未捕获的断言错误

时间:2018-12-19 06:11:34

标签: cypress

我正在尝试运行一项填写表单并单击按钮提交的测试:

it('adds biological sample with maximal input', function(){
    cy.on('uncaught:exception', (err, runnable) => {
    expect(err.message).to.include('of undefined')
      done()
      return false
    });
    cy.get('a').contains('Add biological sample').click();
    cy.get('input[name=sampleID]').first().type("bioSample123");
    cy.get('input[name=alternateSampleID]').first().type("bioSample123AltId");
    cy.get('input[name=preservationMethod]').type('watercolor painting');
    cy.get('input[name=storageLabID]').type('bioSample123Lab456');
    cy.get('input[name=samplingProtocol]').type('dark summoning');
    cy.get('input[name=samplingEffort]').type('maximal');
    cy.get('input[name=fieldNumber]').type('uncountable');
    cy.get('input[name=fieldNNotes]').type('Fred dropped the blood candles again. Thanks, Fred.');
    cy.get('input[name=eventRemarks]').type('You would think this could bw in the field notes');
    cy.get('input[name=institutionID]').type('Hogwarts');
    cy.get('input[name=collectionID]').type('whaleSearch1');
    cy.get('input[name=collectionCode]').type('ws1');
    cy.get('input[name=datasetID]').type('summonedWhales');
    cy.get('input[name=datasetName]').type('Summoned Whales');
    cy.get('input[name=EditTissueSample]').first().click();
    cy.url().should('match',/EncounterSetTissueSample/);
    cy.contains('Action results');
  });

尽管包含

    cy.on('uncaught:exception', (err, runnable) => {
    expect(err.message).to.include('of undefined')
      done()
      return false
    });

在错误发生之前。

这是测试未通过the test failing的图片。

左下方显示错误,

  

错误:未捕获的断言错误:预期为'$ f未定义\ n \ n   错误源自您的应用程序代码,而不是赛普拉斯。   \ n \ n当Cypress检测到来自您的未捕获错误时,   应用程序,它将自动使当前测试失败。\ n \ n此   行为是可配置的,您可以选择通过以下方式将其关闭   聆听“未捕获:异常”   事件。\ n \ nhttps://on.cypress.io/uncaught-exception-from-application'   包括“未定义”   (https://www.flukebook.org/_cypress/runner/cypress_runner.js:49186

似乎我在接受赛普拉斯的建议,但未获得预期的结果。有什么建议么?这件事发生在别人身上吗?

3 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是在规范顶部添加以下内容:

Cypress.on('uncaught:exception', (err, runnable) => {
  return false;
});

这与您的“ it”块具有相同的缩进级别,直接嵌套在“ describe”下。它将导致赛普拉斯忽略所有未捕获的JS异常。

在问题中,Atticus29期望错误消息中出现“未定义”,但错误实际上并不包含该字符串。他可以改变

expect(err.message).to.include('of undefined')

expect(err.message).to.include('is not defined')

然后它将通过。

要关闭规范中所有未捕获的异常处理(推荐) https://docs.cypress.io/api/events/catalog-of-events.html#To-turn-off-all-uncaught-exception-handling

捕获单个未捕获的异常并断言它包含字符串 https://docs.cypress.io/api/events/catalog-of-events.html#To-catch-a-single-uncaught-exception

答案 1 :(得分:0)

您能从赛普拉斯异常块中删除expect(err.message).to.include('of undefined')done()并在测试中添加以下代码并再次运行测试吗?

Cypress.on('uncaught:exception', (err, runnable) => {
    // returning false here prevents Cypress from
    // failing the test
    return false
})

答案 2 :(得分:-1)

在您的 Test Suit 之前添加这些行。

Cypress.on('uncaught:exception', (err, runnable) => {
// returning false here prevents Cypress from
// failing the test
return false
});