我有一个需要JSON
的对象。该对象填充isSupported
函数,并且我正在尝试为其编写测试。
(function() {
'use strict';
this.myFactory = function() {};
this.myFactory.isSupported = function() {
return !!this.JSON;
};
}).call(window);
如果我只为特定测试设置window.JSON = false
,那么所有其他测试显然都会因为需要而失败。
describe('Test IsSupported', function() {
it('Should return false if no JSON', function() {
window.JSON = undefined;
expect(myFactory.isSupported()).toEqual(false);
});
});
如何在模拟窗口的上下文中测试此函数?
答案 0 :(得分:0)
我会在你工厂的构造函数中注入窗口,这样代码是可测试的,同时仍可在浏览器中使用:
<强> factory.js 强>:
module.exports = function(window){
return {
isSupported: function() {
return !!window.JSON;
}
}
};
<强> factory.spec.js 强>:
var Factory = require('./factory');
fdescribe('Test IsSupported', function() {
it('Should return false if no JSON', function() {
var window = {JSON: false};
var factory = Factory(window);
expect(factory.isSupported()).toBeFalsy();
});
it('Should return true if yes JSON', function() {
var window = {JSON: true};
var factory = Factory(window);
expect(factory.isSupported()).toBeTruthy();
});
});