2016-06-07 5 views
3

Ich versuche, eine Komponente mit dem Controller zu testen, mit einigen Bindungen:Angular 1,5 Komponente Unit-Tests mit webpack

class AppSpecificController { 
    constructor() { 
    this.text = this.initialText ? this.initialText : 'No initial text has been specified.'; 
    } 
} 

export const AppSpecificComponent = { 
    bindings: { 
    'initialText': '<bindInitialText' 
    }, 
    templateUrl: '/app/components/app-specific/app-specific.html', 
    controller: AppSpecificController, 
    controllerAs: 'appSpecific' 
}; 

export default AppSpecificComponent; 

In meiner Unit-Test-Datei Ich mag nicht die vollständige Anwendung laden, nur die Dinge, die ich brauche. Also habe ich ein Modul zu verspotten oder einfach nur einen neuen Namen etwas mit Mock erstellen, fügen Sie die Komponente zu diesem Modul und das Modul laden:

import {AppSpecificComponent} from './app-specific.component'; 

describe('AppSpecificComponent',() => { 
    let controller; 
    let scope; 
    let $componentController; 

    beforeEach(() => { 
     angular.module('mock-module', []) 
     .component('appSpecific', AppSpecificComponent); 

     // this fails 
     module('mock-module'); 

     inject((_$componentController_, $rootScope) => { 
     scope = $rootScope.$new(); 
     $componentController = _$componentController_; 
     }); 

     controller = $componentController('appSpecific', {$scope: scope}, {initialText: 'Some text'}); 
    }); 

    it('should test something',() => { 
     expect(true).toBeTruthy(); 
    }); 
}); 

das Modul Erstellen von Mock-Modul ist in Ordnung, aber laden sie versagt , und das Eingeben von Daten in das Nicht-so-viel-geladene Modul schlägt natürlich fehl, ebenso wie das Erstellen eines Controllers, auf dem ich mit dem Testen beginnen kann. Es wäre schön, die Komponenten einzeln testen zu können, getrennt von der Anwendung, in der sie läuft.

einfach den neuen Betreiber für die Klasse mit AppSpecificController nicht seitdem funktioniert die Bindungen Sie von der Komponente erhalten, sind nicht da:

// fails, no bindings available in controller 
controller = new AppSpecificController(); 
+0

Hey Chris, haben Sie dieses Problem gelöst? – Ricardas

+1

Ah ja, ich werde eine Antwort hinzufügen. –

Antwort

2

fand ich die Antwort irgendwo anders auf Stackoverflow, nicht sicher, wo mehr . Die Antwort jedoch, die ich suchte:

angular.mock.module($provide => { 
    $provide.controller('SomeController',() => { ... }); 
    $provide.constant('someConstant', 'some constant'); 
});