Javascript 如何在Cypress中生成isProduction()-函数

Javascript 如何在Cypress中生成isProduction()-函数,javascript,cypress,Javascript,Cypress,我正在编写将在dev环境和prod环境上运行的测试 我可以看出这一点 然而。。。我真的不知道我怎么能在这里避免这个?例如: 在开发环境中,我希望所有页面上都启用noindex的这些测试。 在产品环境中,我希望所有页面上的这些测试noindex都被禁用 那么,我将如何实现这一目标? 解决方案A-对每个环境进行测试 创建一个名为“开发测试”的文件夹和一个名为“产品测试”的文件夹。然而。。。这些测试中的许多几乎是相同的。因此,在这些文件夹中维护测试会非常麻烦 如果这样做的话,另一个问题是,如果我这样

我正在编写将在dev环境和prod环境上运行的测试

我可以看出这一点

然而。。。我真的不知道我怎么能在这里避免这个?例如:

开发环境中,我希望所有页面上都启用
noindex
的这些测试。 在产品环境中,我希望所有页面上的这些测试
noindex
都被禁用


那么,我将如何实现这一目标? 解决方案A-对每个环境进行测试

创建一个名为“开发测试”的文件夹和一个名为“产品测试”的文件夹。然而。。。这些测试中的许多几乎是相同的。因此,在这些文件夹中维护测试会非常麻烦

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

  • 检查登录(在prod+dev上运行)
  • 确保已启用noindex(在开发人员上运行)
  • 确保禁用noindex(在产品上运行)
  • 测试购买(在prod+dev上运行)
。。。这看起来很笨拙


解决方案B-条件测试

但如果我这样做:

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-file中设置一些内容。但理想情况下,我需要一个检查主机名并相应返回布尔值的函数。因此,我可以确保不会因为忘记更改变量而弄乱生产现场。

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

您可以设置,即在本地测试中为一个值设置,在生产中为另一个值设置,并相应地执行测试

在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
        }
    });
});

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

您可以设置,即在本地测试中为一个值设置,在生产中为另一个值设置,并相应地执行测试

在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
        }
    });
});

谢谢你的参与。有些东西显然可以在专用的测试服务器上进行测试。但是我假设应该在生产环境中进行一些测试,以实际检查它是否工作。对吗?我在生产测试中看到了非常有趣的情况,至少可以破坏产品声誉,最多可以破坏你的网站,比如扰乱你的数据库。在我们的团队中,我们为该部件配备了手动测试仪,该测试仪能够准确地知道测试的时间和内容。但毕竟——这是我们的团队政策——我不认为这是最好的,但有一个原因,那就是我们高度不推荐它。谢谢大家参与进来。有些东西显然可以在专用的测试服务器上进行测试。但是我假设应该在生产环境中进行一些测试,以实际检查它是否工作。对吗?我在生产测试中看到了非常有趣的情况,至少可以破坏产品声誉,最多可以破坏你的网站,比如扰乱你的数据库。在我们的团队中,我们为该部件配备了手动测试仪,该测试仪能够准确地知道测试的时间和内容。但毕竟——这是我们的团队政策——我不认为这是最好的,但有一个原因是我们强烈不推荐它