Скажем, у меня есть служба, как это, когда автомобиль получает услугу двигателя впрыскивается, который является функцией конструктора:Тестирование впрыскивается службы, которая является функцией конструктора
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;
});
Как проверить обе линии в инициализации логика:
var engineInstance = engine(settings);
engineInstance.setMiles(settings.engine.miles)
1: Это engine
вызывается с settings
2: Это engineInstance.setMiles
вызывается с settings.engine.miles
Это то, что я делаю прямо сейчас, но не повезло:
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);
});
});
, но этот тест не удается, говоря, что window.mockEngineCreator
никогда не называли. Кажется, что $ обеспечивает создание новой копии переданной функции, вместо того, чтобы ссылаться на нее. Итак, кто-нибудь знает, как настроить тест, который может проверить это правильно?
Большое спасибо, это сделал трюк! Очень приятно :) – acrmuui
Абсолютно роскошный. Если использовать Jasmine 2, не забудьте использовать 'and.callFake' вместо этого. – djskinner
спасибо, я тебя люблю –