2015-10-05 32 views
0

我有一個對象,需要JSON。該對象填充isSupported函數,我試圖爲它寫一個測試。JavaScript中的模擬窗口屬性茉莉花測試

(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

我會在你的工廠的構造函數注入窗口,因此該代碼是可測試的,而在瀏覽器仍可使用:

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(); 
    }); 

});