我是TypeScript的新手,希望从ag-grid列中抓取值列表并将其与字符串数组进行比较。这是我为实现此目的而编写的功能。但我的ActualRatingsValues.push(text);似乎没有填充数组ActualRatingsValues。我不太了解诺言如何运作。这与诺言有关吗?

validateRatingsValues() {
   const ExpectedRatingsValues: Array<string> = ['A', 'B', 'C', 'D', 'E'];
   const ActualRatingsValues: Array<string> = [];
   const wrapper = element.all(by.css('.ag-pinned-left-cols-container div[col-id="name"]'))
            .getText()
            .then(text => {
                ActualRatingsValues.push(text);
            });

    let match = true;
    if (ExpectedRatingsValues != null && ActualRatingsValues != null) {
        if (ExpectedRatingsValues.length !== ActualRatingsValues.length) {
            match = false;

        } else {
            for (let i = 0; i < ActualRatingsValues.length; i++) {
                if (ActualRatingsValues[i].toString !==
                    ExpectedRatingsValues[i].toString) {
                    match = false;
                    break;
                }
            }
        }
    } else {
        match = false;
    }

    expect(match).toBeTruthy();
}

最佳答案

您的代码中有两个问题。

1)ActualRatingsValues.push(text)应该是ActualRatingsValues.concat(text)

因为element.all().getText()返回一个promise,其最终值是一个字符串数组,而不是一个字符串。

2)wrapper是一个承诺,您可以在一个承诺中为ActualRatingsValues分配值。
为了使用ActualRatingsValues,您必须在promise then()内部使用它

validateRatingsValues() {
    const ExpectedRatingsValues: Array<string> = ['A', 'B', 'C', 'D', 'E'];
    const wrapper = element.all(by.css('.ag-pinned-left-cols-container div[col-id="name"]'))
            .getText();

    let match = wrapper.then(function(ActualRatingsValues) {
        let length = ExpectedRatingsValues.length;

        for(let i=0;i<length;i++) {
            let find = ActualRatingsValues.includes(ExpectedRatingsValues[i]);
            if (find === false) {
                return find;
            }
        }

        return true;
    });

    // match is also a promise which eventual value is a boolean
    // why below expect doesn't consume match inside then()
    // because Jasmine can detect match is a promise and do the assertion
    // inside then() in its implement internally.
    expect(match).toBeTruthy();
}

07-24 09:51