سؤال

أريد تقديم وظيفتي الخاصة لاستبدال المصنع، وأريد أيضًا القدرة على الاستخدام .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();
   });
});

أتمنى أن يساعدك هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top