我们假设我有以下代码:
var title = new sap.m.Title();
title.addEventDelegate({
onBeforeRendering: jQuery.proxy(function () {
title.setText(this._createTitleText());
}, this)
});
仅在渲染之前将文本设置为title
。
问题是 如何对此进行单元测试 ?
据我了解,SAPUI5框架将触发此事件,然后我应该能够附加到它并验证标题的文本是否正确,但如何做到这一点并且是正确的方法吗?
这就是我的尝试,但至少我没有从我的控制中获取任何文本,对我而言,我不清楚应该将哪些数据传递给此方法。
title.attachBeforeRendering("data", function (oEvent) {
var text = title.getText();
});
答案 0 :(得分:0)
我发现了以下方式:
title.addEventDelegate({
onBeforeRendering: jQuery.proxy(function () {
assert.equal(title.getText(), expectedTitle, "Title has correct text");
}, this)
});
然而,这还不够,因为onBeforeRendering
将在测试后发生,这意味着它取决于时间,因此不确定它是否会发生。但有一种方法可以肯定:
在测试结束时,我们应该致电:
return new Promise(function (resolve, reject) {
setTimeout(function () {
QUnit.start();
}, 100);
});
将覆盖我们的案例并继续执行另一个单元测试。
答案 1 :(得分:0)
您可以尝试手动调用onAfterRendering,或者只是使控件无效或重新呈现。
尝试做类似
的事情// act
oTitle.onAfterRendering();
// assert
assert.strictEqual(oTitle.getTitle(), "__expected_title__", "Title is correct!");
如果您只是测试标题是否已更改。我更喜欢存根setTitle方法,并检查是否使用正确的参数调用它。
您可以看到通常以这种方式测试事件,例如 https://github.com/SAP/openui5/blob/master/src/sap.m/test/sap/m/qunit/MultiComboBox.qunit.html#L4479
在你的情况下,你不需要假事件,但它非常相似。