2016-04-09 42 views
2

Yeni açılıma ve angularjs jasmine tests: Variable vm not found 'a ait yeni bir gönderiye göre Yeni Açısal testlerimde bir TypeError yaşıyorum ve sorunun ne olduğundan emin değilim. İşte benim sınavım:AngularJS Jasmine testi: TypeError: 'undefined' bir nesne değil

(function(){ 
'use strict'; 
describe('Testing DeliveriesController', function() { 

    beforeEach(module('app.deliveries')); 

    describe('Testing deliveries controller', function(){ 
     var vm, controller; 

     beforeEach(inject(function($controller, $rootScope){ 
      vm = $rootScope.$new(); 
      controller = $controller('DeliveriesController', {$scope:vm}); 
     })); 

     afterEach(function() { 
      vm = undefined; 
      controller = undefined; 
     }); 

     describe('priorities length', function(){ 
      it('it should test priority length', function() { 
       expect(vm.priorities.length).toBe(0); 
      }); 
     }); 
    }); 

    }); 

})(); 

şöyle alıyorum hatadır:

PhantomJS 1.9.8 (Mac OS X 0.0.0) Testing DeliveriesController Testing deliveries controller priorities length it should test priority length FAILED 
Error: [$injector:unpr] Unknown provider: DeliveriesServiceProvider <- DeliveriesService <- DeliveriesController 
http://errors.angularjs.org/1.3.20/$injector/unpr?p0=DeliveriesServiceProvider%20%3C-%20DeliveriesService%20%3C-%20DeliveriesController 
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4031 
    at getService (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4178) 
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4036 
    at getService (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4178) 
    at invoke (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4210) 
    at instantiate (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4227) 
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:8524 
    at /Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular-mocks/angular-mocks.js:1916 
    at /Users/rgoti/ingestion/external-ingestion/app/public/src/app/deliveries/deliveries.spec.js:12 
    at invoke (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular/angular.js:4219) 
    at workFn (/Users/rgoti/ingestion/external-ingestion/app/public/bower_components/angular-mocks/angular-mocks.js:2475) 
undefined 
TypeError: 'undefined' is not an object (evaluating 'vm.priorities.length') 
    at /Users/rgoti/ingestion/external-ingestion/app/public/src/app/deliveries/deliveries.spec.js:23 
+3

Eğer kontrolörün kodunu gösterir misiniz? Problemi daha iyi anlamaya yardımcı olur. 'TeslimatlarController' sadece '$ scope' değil, ayrıca 'Teslimatlar' hizmetine de bağlıdır. Denetleyiciyi başlattığınızda, tüm bağımlılıkları (gerçek ya da alay edilmiş olanları) sağlamalısınız. – Stubb0rn

+1

Haklısınız. Durum buydu. Teste enjekte edilen DeliveriesService'i ekledim ve işe yaradı. Teşekkürler – noobcoder

+0

@ Stubb0rn lütfen yorumunuzu yanıt olarak gönderin. Bana gerçekten yardımcı oldu, ama eğer yorum olarak bırakırsan bulması kolay olmayacak. –

cevap

0

Nezaket: @StubbbOrn dan yorumunu:

Eğer kontrolörün kodunu gösterir misiniz? Problemi daha iyi anlamaya yardımcı olur. DeliveriesController sadece $ kapsam değil aynı zamanda DeliveriesService de bağlı gibi görünüyor. Denetleyiciyi başlattığınızda, tüm bağımlılıkları (gerçek ya da alay edilmiş olanları) sağlamalısınız.

Bu çözüm benim için çalıştı ve çözüm oldu. Teşekkürler @StubbOrn

0

Denetleyicinizde DeliveriesService kullanıyorsunuz.

Bir hizmet kullandığınızda, bu hizmeti enjekte ettiğinizden emin olun veya bir $ sağlayıcı kullanarak ekleyin.

beforeEach(inject(function($controller, $rootScope, _DeliveriesService_){ 
      vm = $rootScope.$new(); 
      DeliveriesSrvc = _DeliveriesService_; 
      controller = $controller('DeliveriesController', {$scope:vm}); 
     })); 

veya

beforeEach(module(function ($provide) { 
    mockObj = { 
     functionName: jasmine.createSpy('functionName') 
    } 
    $provide.value('DeliveriesService',mockObj) 
})); 
İlgili konular