我如何使用jasmine测试此代码?

时间:2016-04-15 13:43:16

标签: javascript jasmine

我即将构建一个小部件,我想使用Jasmine来测试代码,我要测试的一件事就是调用了changeHtml。这是我计划构建小部件的一个粗略示例。

var widget = function(userOptions){
  var options = userOptions

  var init = function(){
    changeHtml();
  };

  var changeHtml = function(){
    document.getElementById(options.widgetId).innerHTML = 'New and exiting things!';
  };

  init();
};

var myWidget = new widget({widgetId: 'widget-div'});

现在,因为changeHtml()widget的私有(正确短语?)函数,我无法监视它是否已被调用。

目前我唯一可以想到的是,让一切都成为widget的公共方法,但这似乎并不是特别好,因为用户不必/想要致电changeHtml()他们自己。

这会是什么解决方案?或者,我是否以错误的方式思考这个问题,检查div的innerHTML是否实际上已被更改而不是被调用的函数会更好吗?

1 个答案:

答案 0 :(得分:2)

1)测试最终结果,或2)在函数/对象中公开的spyOn函数。

要测试场景中的最终结果,您需要在更改后检查HTML值,或者检查它是否已被调用,以便设置值,如下所示:

describe("widget", function () {
    it("Should change html", function () {
        // Arrange
        spyOn(document, "getElementById").and.callThrough();

        // Act
        var myWidget = new widget({ widgetId: 'widget-div' });

        // Assert
        expect(document.getElementById).toHaveBeenCalled();
    });
});