当预期条件失败时,测试分辨率被阻止

时间:2015-10-28 12:38:06

标签: protractor mocha

使用Protractor,并使用Mocha框架,我正在比较两个值数组,一个来自条形图,一个来自文本字段。 代码如下所示:

it("Each bar should have a value equal to its percentage", () => {
    var identicalValue: boolean = false;
    helper.getFirstValues(textLocator).then((textValue) => {
        helper.getBarValues(barLocator).then((barValue) => {
            identicalValue = helper.compareArray(textValue, barValue);
            //compareArray returns a boolean, true if the arrays have the same values
            expect(identicalValue).to.equal(true);
        });
    });
});

函数以这种方式编码:

public getFirstValues(factsheetTab: protractor.ElementFinder): webdriver.promise.Promise<{}> {

    var deferred = protractor.promise.defer();
    factsheetTab.all(by.tagName("tr")).map((ele, index) => {
        return {
            index: index,
            text: ele.all(by.tagName("td")).first().getText()
        }
    }).then((topValue) => {
        deferred.fulfill(topValue);
    },
        (reason) => { deferred.reject(reason) });
    return deferred.promise;
};

public getBarValues(factsheetTab: protractor.ElementFinder): webdriver.promise.Promise<{}> {

    var deferred = protractor.promise.defer();
    factsheetTab.all(by.tagName("tr")).map((ele, index) => {
            return {
                index: index,
                text: ele.all(by.tagName("td")).last().element(by.tagName("div")).getAttribute("data-value")
            }
    }).then((barValue) => {
        deferred.fulfill(barValue);
    },
    (reason) => { deferred.reject(reason) });
    return deferred.promise;
};

我的问题是,当比较返回false时,所以当两个数组有差异时,测试被阻止。它不会失败,浏览器会在该步骤中保持打开状态,并且该过程将停止,忽略剩余的任务。

注意:函数helper.compareArray返回正确的值。我也可以写“expect(false).to.equal(true)”并被阻止。

我在这次测试中做错了吗?你看到这个测试没有完成的原因吗?

编辑:我找到了一种解决方法,以防在测试失败的情况下卡住:

it("Each bar should have a value equal to its percentage", () => {
    var identicalValue: boolean = false;
    var textValue = null;
    helper.getFirstValues(textLocator).then((value) => {
        textValue = value;
    });
    helper.getBarValues(barLocator).then((barValue) => {
        chai.assert.deepEqual(barValue, textValue);
    });
});

(使用@ Brine的建议,为deepEqual)

这似乎有效,如果这个失败,其他测试都会运行。 我仍然很想知道第一个版本出了什么问题。

1 个答案:

答案 0 :(得分:3)

不确定这是INotifyPropertyChanged或Mocha中的错误...但为什么不直接比较数组呢?我没有使用摩卡,但看起来像这样会起作用:

[ImplementPropertyChanged]
public class Person 
{        
    public string GivenNames { get; set; }
    public string FamilyName { get; set; }

    public string FullName
    {
        get
        {
            return string.Format("{0} {1}", GivenNames, FamilyName);
        }
    }
}