Javascript 量角器中的全局前后

Javascript 量角器中的全局前后,javascript,selenium,protractor,Javascript,Selenium,Protractor,在每个规范中,我在每个之前和每个之后都有语句。是否可以全局添加它以避免规范之间的代码重复?beforeach()和afterEach()函数的目的是添加一块重复代码,每次开始或完成执行每个规范(它)时都需要执行这些代码。还有其他方法可以添加泛化代码以避免代码重复,以下是一些方法- 如果有一段代码在启动测试套件之前只需要运行一次(description),那么可以使用jasmine提供的beforeAll()和afterAll()函数 如果希望在启动所有测试脚本之前只在执行开始时运行一次的代码段

在每个规范中,我在每个之前和每个之后都有
语句。是否可以全局添加它以避免规范之间的代码重复?

beforeach()
afterEach()
函数的目的是添加一块重复代码,每次开始或完成执行每个规范(
)时都需要执行这些代码。还有其他方法可以添加泛化代码以避免代码重复,以下是一些方法-

  • 如果有一段代码在启动测试套件之前只需要运行一次(
    description
    ),那么可以使用jasmine提供的
    beforeAll()
    afterAll()
    函数
  • 如果希望在启动所有测试脚本之前只在执行开始时运行一次的代码段,请将其添加到
    onPrepare()
    onComplete()
    函数中
  • 如果您想添加一段甚至在量角器开始自身实例化之前或在其自身关闭之后都应该运行的代码,那么请使用
    beforeloanch
    afterlanch

因此,这完全取决于您希望在其中使用它们的场景。希望有帮助。

我的团队也有同样的愿望,在每个测试文件的开头运行一些样板代码。从这里的讨论来看,似乎没有全局添加到
beforeach()
afterEach()等的钩子

但是,我们确实使用
onPrepare()
函数来缩短在每个规范文件中重复的前后样板代码的数量。下面是一个
beforeAll()
示例,但该模式可用于
beforeach()/afterEach()
。在本例中,我们使用DataSeeder类在数据库中设置测试用户,这是在每个规范文件的最外层
descripe()
块中完成的。(我也将以我的
捕获量角器ErrorLocation
模式离开,因为它对我们非常有用。)

在paragrator.conf.ts中,向
browser.params
对象添加样板代码

  onPrepare: function () {
    ...
    const browser = require('protractor').browser;
    // Define the ConsoleHelper & DataSeeder instances, which will be used by all tests.
    const DataSeeder = require('./e2e/support/data-seeder.js');
    browser.params.dataSeeder = new DataSeeder();

    browser.catchProtractorErrorInLocation = (error, location) => {
      throw new Error(`Error in ${location}\n     ${error}`);
    };
    browser.catchProtractorErrorInBeforeAll = (error) => browser.catchProtractorErrorInLocation(error, 'beforeAll()');

    // Return a promise that resolves when DataSeeder is connected to service and ready to go
    return browser.params.dataSeeder.waitForConnect();
  },
有了它,我们可以在一组简短的行中轻松地执行
beforeAll()
设置代码

  beforeAll(() => {
    return browser.params.dataSeeder.createTestUsers()
      .catch(browser.catchProtractorErrorInBeforeAll);
  });

显然,您需要在设置中执行不同的操作,但您可以看到模式如何应用。

您可以根据需要使用其中任何一种
onPrepare()
onComplete()
onCleanUp()
&
afterLaunch()
。点击这里@priyansushekhar,你的评论似乎很有质量。。你应该加上它作为答案。@Michal有人粘贴了它作为答案。上面的两个问题都不能解决OP的问题,这也是我的问题:你如何在每个规范之前运行一段代码,但只写一次(即不在每个规范文件中重复)?嗨@OvidiuDolha,OP的问题和你的问题的答案实际上都是“否”,用比喻的方式写,所以我没有什么选择。据我所知,茉莉花中根本没有这个功能。作为解决方案的一部分,您可以创建一个全局函数,然后在每个测试脚本文件的beforeach()中调用它。roger,有意义;)