2017-12-25 6 views
1

Ich habe die folgende Datei: classAModel.js mit dem folgenden Code:Testing AngularJS es6 Fabriken mit Jasmin

class classAModel{ 
constructor(model) { 
    'ngInject'; 
    if (!model) return {}; 
    this.id = model.id; 
    this.name = model.name; 
    this.displayName = model.displayName; 
} 
} 
export default classAModel; 

Dieser Code als eine Fabrik in einer anderen Datei definiert: module.js:

import classAModelfrom './classAModel' 
module.factory('ClassAModel', ClassAModel); 

Dieser Code funktioniert perfekt, wenn er nicht im Testkontext ist. Es funktioniert mit Webpack, um ein Bündel zu erstellen, das geladen und ausgeführt wird. So weit, ist es gut. Nun, die Frage ist, wie ich diese Klasse testen kann. Bevor ich meinen Code in den es6-Stil änderte, benutzte ich eine Funktion und es funktionierte. Der Test lädt zuerst das Bundle, aber wenn ich versuche, die Fabrik (wieder, wie zuvor) zu injizieren, erhalte ich einen Fehler: Unbekannter Anbieter: ModelProvider < - Modell < - KlasseAModel. Ich kann verstehen, warum er denkt, dass es ein Problem gibt, aber ich kann nicht verstehen, wie ich es beheben kann.

Darüber hinaus frage ich mich, ob dies der richtige Weg ist, mit der Fabrik zu arbeiten, anstatt eine Factory-Methode innerhalb der Klasse zu erstellen, die das Modell erhält und dann mein Objekt erstellt.

Dank

+0

Könnten Sie bitte Ihren Testcode posten? Haben Sie versucht, eine Mock-Instanz für 'model' zu erstellen und diese im Konstruktor zu übergeben? – Lihini

+0

Der Code fällt beim Versuch, classAModel zu injizieren - es wird nicht wie zuvor in den inject-Teil gelangen. Ich denke, ein Beispiel für eine Fabrik, die als Parameter eine Mock-Server-Antwort bekommt und wie man sie initialisiert, wird hier wirklich helfen. –

Antwort

0

Basierend auf den Informationen, die Sie zur Verfügung gestellt haben, ist hier ein einfacher Testfall für die Fabrik zu testen. Hoffe das ist was du suchst.

import classAModel from './classAModel' 

let classAInstance; 
describe('classAModel', function() { 

    beforeEach(function() { 
     modelInstance = new Model(); 
     classAInstance = new classAModel(modelInstance); 
    }); 

    it('should have id provided by model',() => { 
     expect(classAInstance.id).toBe(modelInstance.id); 
    }); 
}); 
Verwandte Themen