2014-07-16 23 views
8

yılında angularjs hizmet saplama için ben saplama nasılSinon Yerine gibi elle sahte hizmeti yaratma Testler

$controller('mycontroller', { $scope: scope, myService: mockService }); 

benim Sinon kullanarak gerçek servis ve "mockService" benim denetleyiciye yukarıda enjekte edilen bu stubbed hizmet enjekte? Servis yöntemlerim yeniden isimlendirilirse gerçek servisimi koymayı tercih ederim, o zaman kontrolör testlerim servis testlerim ile birlikte başarısız olur.

Şimdiden teşekkürler ve umarım bu mantıklıdır.

cevap

15

Tüm hizmetin yerine, üzerinde durmak istediğiniz hizmetin yöntemlerini kullanmazsınız. böylece enjeksiyonun normal olarak açılmasını sağlayın ve sonra $ enjektörden aldığınız servisin yöntemlerini dışarı aktarın, yani tek bir test kapsamında hizmetler tekil sayılırken korkak bir şey yapmak zorunda değilsiniz.

Hep bir sinon sandbox ve sahte şeyler oluşturmak - o zaman size tüm alay yöntemleri geri yükleyebilirsiniz her testten sonra

var sandbox, myService, somethingUnderTest; 

beforeEach(module('myModule')); 

describe('something', function() { 
    beforeEach(inject(function ($injector) { 
     sandbox = sinon.sandbox.create(); 
     myService = $injector.get('myService'); 
     somethingUnderTest = $injector.get('somethingUnderTest'); 
    })); 

    afterEach(function() { 
     sandbox.restore(); 
    }); 

    it('should be defined', function() { 
     expect(somethingUnderTest).to.exist; 
    }); 

    describe('someMethod', function() { 
     it('should call the start method on myService', function() { 
      sandbox.stub(myService, 'start'); 

      somethingUnderTest.start(); 

      expect(myService.start.calledOnce).to.equal(true); 
     }); 
    }); 
});