Testen injiziert service, der eine Konstruktor-Funktion

Sagen, dass ich einem service wie diesem, wo ein Auto bekommt ein Motor service injiziert, das eine Konstruktor-Funktion:

angular.module('car', ['engine']).factory('carCreator', function( engine ) {

    var carCreator = function( settings ) {

        var engineInstance = engine( settings );
        engineInstance.setMiles( settings.engine.miles );

        return {
            brand: settings.brand;
            engine: engineInstance;
        }
    };

    return carCreator;
});

Wie Teste ich die beiden Zeilen in der Initialisierung der Logik:

var engineInstance = engine( settings );
engineInstance.setMiles( settings.engine.miles )

1: engine heißt mit settings

2: engineInstance.setMiles heißt mit settings.engine.miles

Dies ist, was ich gerade mache, aber mit kein Glück:

describe('initialization', function() {

    var carCreator;
    var settings = {
        brand: 'Ford',
        engine: {
            miles: 12000
        }
    };

    var mockEngineInstance = {
        setMiles: function() {}
    };

    window.mockEngineCreator = function() {
        return mockEngineInstance;
    }

    beforeEach(module('car', function($provide) {
        $provide.value('engine', mockEngineCreator );
    }));

    beforeEach(inject(function(_carCreator_) {
        carCreator = _carCreator_;
    }));

    it('should init text object correctly on initialization', function() {

        spyOn(window, 'monkEngineCreator');
        spyOn(mockEngineInstance, 'setMiles');
        carCreator( settings );

        expect(window.mockEngineCreator).toHaveBeenCalledWith( settings );
        expect(mockEngineInstance.setMiles).toHaveBeenCalledWith( settings.engine.miles );
    });
});

aber dieser test fehlschlägt, sagen, dass window.mockEngineCreator nie genannt wurde. Es scheint, dass $bereitstellen erstellt eine neue Kopie der Funktion übergeben, anstatt halten eine Referenz auf diese. Also, weiß jemand, wie man das setup ein test, testen können das richtig?

InformationsquelleAutor acrmuui | 2013-12-04
Schreibe einen Kommentar