使用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)
这似乎有效,如果这个失败,其他测试都会运行。 我仍然很想知道第一个版本出了什么问题。
答案 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);
}
}
}