覆盖窗口作为函数调用上下文

时间:2019-03-18 12:43:30

标签: javascript mocha cypress

我正在用cypress编写测试用例,我写的每一行都引用cy对象。我的测试代码示例如下所示:

it('does stuff', () => {
    cy.visit(startUrl);
    cy.get(".new-item-button").click();
    cy.url().should('include', url2);
    cy.get(".home-link").click();
    cy.url().should('include', startUrl);
    cy.url().should('not.include', url2);
}

看到所有cy引用使我感到难过。无论如何,我的测试函数中的函数调用要使用不同的调用上下文吗?仅仅删除cy会使javascript查找全局函数,但是无论如何我还是要在cy对象中让javascript查找它们,以便我可以这样写?

it('does stuff', () => {
    visit(startUrl);
    get(".new-item-button").click();
    url().should('include', url2);
    get(".home-link").click();
    url().should('include', startUrl);
    url().should('not.include', url2
}

那会让我感到更快乐。谢谢。

2 个答案:

答案 0 :(得分:2)

由于调用父命令会启动新命令,因此您实际上可以执行以下操作:

it('does stuff', () => { 
cy.visit(startUrl)
.get(".new-item-button").click()
.url().should('include', url2)
.get(".home-link").click()
.url().should('include', startUrl)
.url().should('not.include', url2)
 }

答案 1 :(得分:1)

可以,如果您没有使用严格模式,但您可能不应该这样做。 JavaScript的with语句已被弃用,因为它使代码非常不清楚(Douglas Crockford在this article中有详细说明)。

以下是您使用with的方法:

// NOT RECOMMENDED, and doesn't work in strict mode
with (cy) {
    visit(startUrl);
    // ...
}

cy.已经很短了,我会强烈建议继续使用它。很简单,其他人也很容易理解这些代码。