【问题标题】:How to write unit test for a function?如何为函数编写单元测试?
【发布时间】:2019-05-02 11:10:35
【问题描述】:

我将单元测试带入我的 javascript 文件。由于我不希望某些函数被继承,所以我独立声明了一个函数。如何编写函数的单元测试? (就像下面的“getFormatData”)我还没有找到关于这个的教程。也许关键字不正确 :) 我知道如何为 setValue 编写 UT,但如何为“getFormatData”编写 UT。我试过但控制台显示未定义 getFormat。即使我添加“window.getFormatData({});”,错误信息也是一样的。

MockedObject.prototype.setValue(oData){
    var oMockedData = getFormatData(oData);

    this.setData(oMockedData);
};

function getFormatData(oData){
    return oData ? oData : 1;
}
//Test "setValue":

QUnit.module("Test setValue", funciton(assert){
    var control = new MockedObject()
    var oData = {};
    sinon.stub(window, "getFormatData").returns("MockedResult");
    sinon.stub(control, "setData");

    control.setValue(oData);

    assert.ok(control.setData.called, "setData is called");

    window.getFormatData.restore();
    control.setData.restore();
})

//Test "getFormatData": 
QUnit.module("getFormatData", function(assert) {
     // Act
     var result = getFormatData({});//var result = window.getFormatData({});

     //Assert
     assert.strictEqual(result, 1, "Accepted");
})

【问题讨论】:

  • 函数声明创建变量,所以真的不清楚你在这里问什么。

标签: javascript qunit stub


【解决方案1】:

那么,getFormatData 是做什么的?基于其输入的预期结果是什么? 有两种情况:oData 为真---> oData 返回; 或 oData 为假 ---> 返回 1;

在这种情况下,您可以调用例如 getFormatData(113) 并断言返回值为 113,然后调用 getFormatData(false) 并断言返回值为 1。在 getFormatData 上没有太多要测试的内容。

【讨论】:

  • 我试过了,但控制台显示 getFormatData 未定义的错误消息。请检查上面的代码。
  • 看起来这更多地取决于编写代码的上下文。也许当您运行测试时,访问的不是同一个窗口对象。如果可行,您可以将其添加到 MockedObject.prototype 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 2016-09-25
  • 1970-01-01
  • 2022-01-11
  • 2018-01-17
  • 2012-01-06
相关资源
最近更新 更多