【发布时间】:2020-11-02 21:41:46
【问题描述】:
我正在编写将在开发环境和生产环境中运行的测试。
我可以看到Cypress-documentaion discourages anti-patterns and conditional testing。
但是...我真的不知道如何在这里避免这种情况?举个例子:
在开发环境上,我希望这些测试在所有页面上都启用 noindex。
在 prod-environment 上,我希望这些测试 noindex 在所有页面上禁用
那么我该如何实现呢?
解决方案 A - 为每个环境进行测试
创建一个名为“Tests-for-dev”的文件夹和一个名为“Tests-for-prod”的文件夹。然而……许多这些测试几乎是相同的。所以在这些文件夹中维护测试会很麻烦。
如果这样做,另一个问题是,如果我这样做,特定于环境的测试可能必须在其他事情之后运行。示例:
-
- 检查登录(在 prod + dev 上运行)
-
- 确保启用 noindex(在 dev 上运行)
-
- 确保禁用 noindex(在 prod 上运行)
-
- 测试购买(在 prod + dev 上运行)。
...这看起来很笨拙。
解决方案 B - 条件测试
This would go against the documentations recommendations.
但如果我这样做:
before( () => {
cy.location()
.then( (loc) => {
cy.wrap( loc.hostname ).as( 'hostname' );
});
});
it( 'Conditional test', () => {
cy.get( '@hostname' )
.then( (hostname) => {
if( hostname === 'woocommerce-451488-1413422.cloudwaysapps.com' ){
cy.log( 'Dev!' );
// Enable noindex
}
if( hostname === 'greenmind.dk' ){
cy.log( 'Prod!' );
// Disable noindex
}
});
});
然后这行得通。但这违背了文档的指导语。
奖金问题
有没有办法可以创建一个全局函数,所以我可以在所有测试中编写:
it( 'Some test', () => {
if( isProd() ){
// Do something productiony
}
if( ! isProd() ){
// Do something developpy
}
});
...我尝试使用命令。但是由于异步的性质,所以我不知道他们在使用时是否已经解决了。我还考虑在 Cypress.json 文件中设置一些内容。但理想情况下,我想要一个检查主机名并相应返回布尔值的函数。所以我可以确保不会因为忘记更改变量而弄乱生产站点。
【问题讨论】:
标签: javascript cypress