如何对SAPUI5控件的onBendering进行单元测试?

时间:2017-03-22 08:31:06

标签: javascript unit-testing sapui5

我们假设我有以下代码:

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();
});

2 个答案:

答案 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

在你的情况下,你不需要假事件,但它非常相似。