我有在env.js文件中定義一些全局環境變量的角度應用:設置全局變量,茉莉爲angularjs
(function(sp) {
'use strict';
pk.env = pk.env || {};
// localhost
pk.env.baseUrl = 'http://localhost:8080/';
})(typeof exports === 'undefined' ? (this.pk = this.pk || {}) : exports);
這些變量在多個工廠被用來製造REST API調用:
'use strict';
angular.module('pkApp').factory('pkFactory', PKFactory);
function PKFactory($http) {
var urlBase = pk.env.baseUrl;
var apiUrl = 'v1/data';
var _pkFactory = {};
_pkFactory.getData = function() {
return $http.get(urlBase + apiUrl);
};
return _pkFactory;
}
我使用茉莉花編寫單元測試的這個工廠,我不斷收到錯誤:
ReferenceError: Can't find variable: pk
如果我從工廠中刪除這個變量引用,測試運行良好。
'use strict';
console.log('=== In pk.factory.spec');
describe('Unit: pkFactory', function() {
beforeEach(module("pkApp"));
var $httpBackend, $rootScope, pkFactory;
beforeEach(inject(function($injector) {
// Set up the mock http service responses
$httpBackend = $injector.get('$httpBackend');
$httpBackend.when('GET', 'v1/data').respond('Not found');
pkFactory = $injector.get('pkFactory');
}));
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
it('expects getData method to be defined', function(){
expect(pkFactory.getData()).toBeDefined();
$httpBackend.flush();
});
})
如何向工廠注入'pk.env.baseUrl'的值?我曾嘗試使用$窗口,但它沒有奏效。
看起來IIFE功能會喜歡你聲明的環境變量限制它的範圍。 –
那麼你是說我應該將其轉換爲角度常數或值? – imgr8
是的......否則你需要將它變成全局的東西而不將它包裝到IIFE模式中? –