2017-07-06 1 views
0

Dies ist der Fehler, den ich zu sehen bin, wenn ich meinen Unit-Test laufen zu lassen ..Mocking eines Service, das ist in einem Component-Controller in einem Unit-Test zur Verfügung gestellt

Expected undefined to be defined. 
TypeError: undefined is not an object (evaluating '$rootScope.$digest') 

Module 'ThirdPartyModule' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument. 

Irgendwelche Ideen, wie die testService zu verspotten, so dass ich Kann ich meine Komponente noch kompilieren?

test.component.spec.ts

import { TestModule } from '../index'; 

describe('Component: testComponent',() => { 

    let $rootScope: angular.IScope; 
    let element: angular.IAugmentedJQuery; 

    beforeEach(() => { 
    angular.mock.module('ui.router'); 
    angular.mock.module(TestModule.name); 
    }); 

    beforeEach(inject((
    _$rootScope_: angular.IScope, 
    $compile: angular.ICompileService, 
    _$state_: angular.ui.IStateService) => { 
    $rootScope = _$rootScope_; 
    element = angular.element('<test></test>'); 
    element = $compile(element)($rootScope); 
    })); 

    it('should verify component compiled and rendered template',() => { 
    expect(element).toBeDefined(); 
    $rootScope.$digest(); 
    let link = element.find('a'); 
    expect(link.text()).toContain('Click this link!'); 
    }); 
}); 

test.module.ts

import { TestComponent } from './test'; 

export let TestModule: ng.IModule = angular.module(
    'test', // my module name 
    ['ui.router', 'ThirdPartyModule']) // dependencies, ThirdPartyModule contains testService 
    .component('test', new TestComponent()); 

test.component.ts

import { TestComponentController } from './test.component.controller'; 

export class TestComponent implements ng.IComponentOptions { 
    public template: string = '<a ng-if="ctrl.serviceReturned">Click this link!</a>'; 
    public controller: Function = TestComponentController; 
    public controllerAs: string = 'ctrl'; 

    constructor() {} 
} 

test.component.controller.ts

export class TestComponentController { 

    public serviceReturned: boolean = false; 

    constructor(private testService: any) { 
    if (this.testService.isDone()) { 
     this.serviceReturned = true; 
    } 
    } 
} 

TestComponentController.$inject = ['testService']; 
+1

Während des inject-Vorgangs tritt ein Fehler auf, der dazu führt, dass $ rootScope und das Element nicht definiert sind. Es wird hier nicht angezeigt. Es ist nicht möglich zu sagen, was falsch ist, ohne den Fehler zu kennen. wenn es unterdrückt wird, fangen Sie es mit Versuch ein ... fangen Sie vor beforeEach ein. – estus

+0

heres der Fehler, ich aktualisierte Frage .. 'Modul 'ThirdPartyModule' ist nicht verfügbar! Sie haben entweder den Modulnamen falsch geschrieben oder vergessen, ihn zu laden. Wenn Sie ein Modul registrieren, stellen Sie sicher, dass Sie die Abhängigkeiten als zweites Argument angeben. " – bobbyrne01

+0

Ich denke, der Fehler erklärt alles. Das Modul wurde nicht geladen. – estus

Antwort

0

Sie müssen 'ThirdPartyModule' nicht in einem angular.mock.modul hinzufügen?

Verwandte Themen