量角器-将ControlFlow更改为异步等待

时间:2019-06-15 18:58:22

标签: javascript asynchronous jasmine protractor

以下是我们的规格文件,无需使用async关键字即可正常运行。

enter image description here

但是,当我们尝试将现有的量角器框架从控制流更改为异步时,请等待其在describe和it块中均显示上述错误。即使我们尝试使用'async()=>'。真令人沮丧

2 个答案:

答案 0 :(得分:1)

更详细的解释是describe块仅用于分组。并且async函数是“用于返回的诺言链的语法糖”,并且describe块通常不支持(如等待解决)返回的诺言。
另外,最好将所有require声明放在这些describe块之外。我将像下面那样重组该代码,然后重试:

const projectsPage = require('../pages/Projects_Page.js');
const commonFunctions = require('../utils/CommonFunctions.js');

describe('Projects CRUD', () => {
    it('Rename Project - Duplicate name check', async () => {
        //your code here  
    });
});

答案 1 :(得分:0)

像Jasmine,Mocha这样的测试框架包含这些关键字,例如describe,before,beforeEach等。测试框架具有内置的执行顺序这些块的定义。 对于describe和It块,函数定义为

export const describe: {
    /**
    * Registers a new test suite.
    * @param name The suite name.
    * @param fn The suite function, or {@code undefined} to define a pending test suite.
    */
    (name: string, fn: Function): void;


 export const it: {
/**
 * Add a test to the current suite.
 * @param name The test name.
 * @param fn The test function, or {@code undefined} to define a pending test case.
 */
(name: string, fn: Function): void;

表示描述,其块采用两个参数。名称和功能。在describe的情况下,您不需要使用async / await,因为此函数在内部使用“ return”。因此它将在描述块内等待整个事情完成。换句话说,如果您仅在describe块中编写async,那么您将不得不在不需要的describe函数下编写await。

在It块的情况下,您将必须像异步function(){}一样编写,因为您必须等待在它下面编写的步骤。请参考以下示例。

describe('angularjs homepage', function() {
  it('should greet the named user', async function() {
    await browser.get('http://www.angularjs.org');

    await element(by.model('yourName')).sendKeys('Julie');

    var greeting = element(by.binding('yourName'));

    expect(await greeting.getText()).toEqual('Hello Julie!');
  });

注意:如果函数不返回Promise,则不需要使用await。这没用。在上面的代码片段中,元素之前没有等待。这意味着element不返回promise,它仅返回ElementFinder的对象。