【问题标题】:How to make an isProduction()-function in Cypress如何在 Cypress 中创建 isProduction() 函数
【发布时间】: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”的文件夹。然而……许多这些测试几乎是相同的。所以在这些文件夹中维护测试会很麻烦。

如果这样做,另一个问题是,如果我这样做,特定于环境的测试可能必须在其他事情之后运行。示例:

    1. 检查登录(在 prod + dev 上运行)
    1. 确保启用 noindex(在 dev 上运行)
    1. 确保禁用 noindex(在 prod 上运行)
    1. 测试购买(在 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


    【解决方案1】:

    据我所知,在生产环境中进行测试是最糟糕的想法,最好在将代码投入生产环境之前,建立一个定期运行测试的专用测试服务器。但是,如果您坚持 - 这里有一个解决方案,您可以使用它来根据环境更改测试。

    您可以设置一个Environment value,它在本地测试中为一个值设置,在生产中为另一个值设置,并相应地进行测试。

    在 config.env.json 中:

    {
         "baseUrl": "localHostUrl"
    }
    

    在测试中

    context( 'Test according to development or production' , function () {
        it( 'Order with DateTime DOES NOT exists', () => {
            if (Cypress.env("baseUrl") === "localHostUrl") {
                // Code for testing locally
            } else if (Cypress.env("baseUrl") === "testServerUrl") {
                //Code for testServer
            }
            else {
                // Code for testing in production
            }
        });
    });
    

    【讨论】:

    • 感谢您的参与。有些东西显然可以在专用测试服务器上进行测试。但我认为应该在生产环境中进行一些测试,以实际检查它是否有效。对吗?
    • 我在生产中的测试中看到了非常有趣的情况,这至少会破坏产品声誉,最多会破坏您的网站,例如扰乱您的数据库。在我们的团队中,我们为该部分配备了手动测试仪,该测试仪确切地知道何时以及测试什么。但毕竟 - 这是我们的团队政策 - 我并不是说这是最好的事情,但有一个理由强烈不推荐它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 2021-07-30
    • 2013-10-23
    • 1970-01-01
    相关资源
    最近更新 更多