SORU
8 ŞUBAT 2013, Cuma


AngularJS bir hizmet içine enjekte eden bir alay

Hizmet AngularJS bir servis yazdım ve test birimi.

angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
    factory('myService', function ($http, fooService, barService) {

    this.somthing = function() {
        // Do something with the injected services
    };

    return this;
});

App.js benim dosya bu kayıtlı:

angular
.module('myApp', ['fooServiceProvider','barServiceProvider','myServiceProvider']
)

Dİ gibi çalışıyor test edebilirim

describe("Using the DI framework", function() {
    beforeEach(module('fooServiceProvider'));
    beforeEach(module('barServiceProvider'));
    beforeEach(module('myServiceProvder'));

    var service;

    beforeEach(inject(function(fooService, barService, myService) {
        service=myService;
    }));

    it("can be instantiated", function() {
        expect(service).not.toBeNull();
    });
});

Bu enjekte edilen nesneler alay anlamına gelir dahil olmak üzere hizmet birimi test etmek istiyorum, bir sonraki servis Dİ çerçevesi tarafından oluşturulan, ancak kanıtladı.

Bunu nasıl yaparsınız?

Örneğin modüle sahte nesneler koyarak denedim

beforeEach(module(mockNavigationService));

ve hizmet tanım olarak tekrar yazarlar

function MyService(http, fooService, barService) {
    this.somthing = function() {
        // Do something with the injected services
    };
});

angular.module('myServiceProvider', ['fooServiceProvider', 'barServiceProvider']).
    factory('myService', function ($http, fooService, barService) { return new MyService($http, fooService, barService); })

Ama ikinci servis olarak Dİ tarafından oluşturulan durdurmak gibi görünüyor.

Kimse benim birim testleri için enjekte hizmetleri sahte nasıl anlarım?

Teşekkürler

David

CEVAP
12 EYLÜL 2013, PERŞEMBE


$provide kullanarak hizmete alay enjekte edebilirsiniz.

Eğer bir bağımlılık ile aşağıdaki hizmet varsa bunun bir yöntemi bişeyler çağırdı:

angular.module('myModule', [])
  .factory('myService', function (myDependency) {
        return {
            useDependency: function () {
                return myDependency.getSomething();
            }
        };
  });

Aşağıdaki gibi myDependency bir sahte sürümü enjekte edebilirsiniz

describe('Service: myService', function () {

  var mockDependency;

  beforeEach(module('myModule'));

  beforeEach(function () {

      mockDependency = {
          getSomething: function () {
              return 'mockReturnValue';
          }
      };

      module(function ($provide) {
          $provide.value('myDependency', mockDependency);
      });

  });

  it('should return value from mock dependency', inject(function (myService) {
      expect(myService.useDependency()).toBe('mockReturnValue');
  }));

});

15* *çağrısı nedeniyle aslında açıkça myDependency her yerde enjekte etmeye gerek yok unutmayın. Başlatılıyor enjeksiyon sırasında bu başlık altında olur. MockDependency burada ayarlarken, kolayca bir casus olabilir.

16* *that great video link için teşekkürler.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Doug Bernards

    Doug Bernard

    7 Kasım 2007
  • Jana Williams

    Jana William

    17 AĞUSTOS 2011
  • ParryGripp

    ParryGripp

    12 AĞUSTOS 2006