[英]How to unit test onBeforeRendering of SAPUI5 control?
我们假设我有以下代码:
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();
});
我发现了以下方式:
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);
});
这将涵盖我们的情况加上继续执行另一个单元测试。
您可以尝试手动调用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
在您的情况下,您不需要假事件,但它非常相似。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.