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

  • Dion Coulls

    Dion Coulls

    16 AĞUSTOS 2006
  • Leigh Momii

    Leigh Momii

    10 Mayıs 2006
  • Titan Lee Hai

    Titan Lee Ha

    14 Temmuz 2008