运行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?类似,但我找不到解决问题的正确方法。
有什么想法吗?谢谢大家的帮助!
答案 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'
});