قدمت AngularJS Jasmine Spy المصنع والاتصال
-
21-12-2019 - |
سؤال
أريد تقديم وظيفتي الخاصة لاستبدال المصنع، وأريد أيضًا القدرة على الاستخدام .and.callThrough()
لاستخدام الوظيفة الأصلية.المشكلة الرئيسية التي أواجهها هي أنني لا أستطيع إدخال مصنع في بيان الوحدة الوهمية.
describe("It", function() {
var mockFactory;
//This works, but the original functionality is gone at this point because I'm overriding it with $provide
beforeEach(angular.mock.module('myModule', function($provide) {
mockFactory = jasmine.createSpy('myFactory');
$provide.factory('myFactory', function() { return mockFactory });
}));
//This fails because I cant inject the actual factory into the module mock
beforeEach(angular.mock.module('myModule', function($provide, myFactory) {
mockFactory = jasmine.createSpy('myFactory', myFactory);
$provide.factory('myFactory', function() { return mockFactory });
}));
})
أي أفكار حول كيفية التغلب على هذا؟شكرا لك مقدما!
المحلول
يمكنك استخدام $provide.decorator()
مثله:
describe('It', function() {
var mockFactory;
beforeEach(module('myModule', function ($provide) {
$provide.decorator('myFactory', function ($delegate) {
mockFactory = jasmine.createSpy('myFactory', $delegate).and.callThrough();
return mockFactory;
});
}));
it('should call through', function () {
mockFactory('foo', 'bar');
expect(myFactory).toHaveBeenCalled();
});
});
أتمنى أن يساعدك هذا.
لا تنتمي إلى StackOverflow