Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting global variables in jasmine for angularjs

I have an angular application with some global environment variables defined in an env.js file:

(function(sp) {
'use strict';

pk.env = pk.env || {};

// localhost
pk.env.baseUrl = 'http://localhost:8080/';
})(typeof exports === 'undefined' ? (this.pk = this.pk || {}) : exports);

These variables are used in multiple factories to make REST API calls:

'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;
}

I am writing unit tests for this factory using Jasmine and I keep getting the error:

ReferenceError: Can't find variable: pk

If I remove this variable reference from the factory, the tests run fine.

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

How do I inject value of 'pk.env.baseUrl' into the factory? I have tried using $window, but it didn't work.

like image 645
imgr8 Avatar asked Jan 23 '26 22:01

imgr8


1 Answers

As pretty much already answered here, you can also declare a global variable within your test file

var globalVar = "something";

describe('Your test suit', function() {
    ...
});

and if you are using Karma you can edit the karma.conf.js file to define it

 // list of files / patterns to load in the browser
 files: [
    ...,
    'file-containing-the-global-variable.js'
 ],
like image 160
Matthias Avatar answered Jan 26 '26 10:01

Matthias