Javascript Jasmine模仿函数中的构造函数

Javascript Jasmine模仿函数中的构造函数,javascript,angularjs,unit-testing,angularjs-scope,jasmine,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

我在运行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()方法不存在”。 我认为这是类似的问题,但我找不到一个正确的方法来解决这个问题


有什么想法吗?谢谢你的帮助

JSZip是在窗口上定义的。您不必将其传递给构造函数。在您的jasmine页面(您的枪套在那里),参考jszip.js。如果需要,可以创建一个服务

值(“JSZip”,JSZip)


然后将其传递到控制器中。不过,这只有在您想要模拟JSZip时才有用。

解决了它!我实际上并不想测试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'
});

能否显示“makePhotos()”的函数?我只看到“makeZip”愚蠢的我,名字现在固定了哈哈,它发生了。那么,一切都按预期进行了吗?不,不幸的是问题仍然存在。。。