mardi 7 juillet 2015

undefined is not an object, karma error

I'm trying to do some unit testing using Karma Jasmine. I want to just run the function $scope.login in my test to get it to test if it can run, but I constantly get the error

TypeError: 'undefined' is not an object (evaluating 'LoginService.initiateRequest( $scope.credentials.username, $scope.credentials.password).then')"

I've tried not using mocks and just injecting the services normally, but it gives me a massive error that I can't even look at because it gives me 300+ lines of error code. I'm using PhantomJS. My test.

describe('LoginController', function() {
var $controller;
var ctrl;
var LoginService;
var ionicLoadingMock;
var localStorageServiceMock;
var stateMock;
var loginServiceMock;
var accountMock;
beforeEach(module('myApp.services', 'myApp.controllers'));

beforeEach(inject(function($rootScope, $controller) {
    ionicLoadingMock = jasmine.createSpyObj('ionicLoading', ['show']);
    stateMock = jasmine.createSpyObj('state', ['go']);
    loginServiceMock = jasmine.createSpyObj('LoginService', ['initiateRequest']);
    localStorageServiceMock = jasmine.createSpyObj('localStorageService', ['set']);
    accountMock = jasmine.createSpyObj('Account', ['get']);
    $scope = $rootScope.$new();
        ctrl = $controller('LoginController', {
            $scope: $scope,
            $state: stateMock,
            $ionicLoading: ionicLoadingMock,
            LoginService: loginServiceMock,
            localStorageService: localStorageServiceMock,
            Account: accountMock
        });
}));
it('Checks Credentials', function() {
    expect($scope.credentials).toBeDefined;
});
it('Login Function Is Defined', function() {
        expect($scope.login).toBeDefined;
});
it('Login Function Can Run', function() {
        $scope.login();
});
});

My controller.

angular.module('myApp.controllers', ['ngCordova', 'ngFileUpload'])

.controller('LoginController', function($scope, $state, LoginService, $cordovaTouchID, $ionicLoading, localStorageService) {
$scope.credentials = {};
$scope.login = function() {
       $ionicLoading.show({
        template: "Logging In"
    });
    LoginService.initiateRequest(
    $scope.credentials.username, 
    $scope.credentials.password).then(function(){
        localStorageService.set('username', $scope.credentials.username);
        var TestVar2;
        $ionicLoading.hide();
        $scope.credentials.password = "";
        $state.go('main');
    });
};
})

My conf.js

    './www/lib/angular/angular.js',
    './www/lib/ionic/js/ionic.js',
    './www/lib/ionic/js/ionic-angular.js',
    './www/lib/lodash/lodash.js',
    './www/lib/ng-cordova/ng-cordova.js',
    './www/lib/angular-base64/angular-base64.js',
    './www/lib/angular-local-storage/dist/angular-local-storage.js',
    './www/lib/ng-file-upload/ng-file-upload.js',
    './www/lib/angular-mocks/angular-mocks.js',
    './www/js/services.js',
    './www/js/controllers.js',
    './www/js/app.js',
    './tests/Controllers/controllers.tests4.js',
    './tests/Services/services.tests.js'

Aucun commentaire:

Enregistrer un commentaire