Jasmine嘲笑函数中的构造函数

时间:2014-08-22 14:24:56

标签: javascript angularjs unit-testing angularjs-scope jasmine

运行Jasmine测试时出错:'ReferenceError:JSZip未定义'。这是我的控制器:

$scope.makeZip = function() {
    var zip = new JSZip();
    zip.file('myPhoto.txt', 'Hello World);
    return 'foo' + zip.generate();
};

并测试:

it('should make a zip with correct name', function() {
    var zipFileName = scope.makeZip();
    expect(zipFileName).toMatch('foo');
});

我的猜测是我需要以某种方式模拟JSZip构造函数:我尝试在测试开始时插入以下内容:

spyOn(window, 'JSZip').andReturn(null);

然后我得到'JSZip()方法不存在'。 我认为这与Jasmine - How to spy on a function call within a function?类似,但我找不到解决问题的正确方法。

有什么想法吗?谢谢大家的帮助!

2 个答案:

答案 0 :(得分:0)

在窗口上定义了JSZip。您不必将其传递给构造函数。在你的茉莉花页面(你的规格),引用jszip.js 。如果你愿意,你可以创建一个服务..

你的角度模块 .value(" JSZip",JSZip);

然后将其传递给您的控制器。这只有在你想模拟JSZip时才有用。

答案 1 :(得分:0)

解决了!我实际上并不想测试JSZip,只是为了检查函数makeZip是否被正确调用。

it('should make a zip with correct name', function() {
    window.JSZip = function() {
            this.file = function() {};
            this.generate = function() {
                return 'bar';
            };
        };
        var zipFileName = scope.makeZip();
        expect(zipFileName).toMatch('foo'); //makeZip should return string containing 'foo'
});