2014-10-21 3 views
0

dataService 팩토리가 포함 된 각도 컨트롤러를 단위 테스트하려고합니다. 문제는 TypeError 에러입니다 : 'undefined'가 (myScope.data.test를 평가하는) 객체가 아닙니다.재 스민으로 공장을 조롱하지 않고 Angular.js 컨트롤러 테스트

내가 잘못하고있는 것을 누구든지 볼 수 있습니까?

/// <reference path="../scripts/jasmine.js" /> 
/// <reference path="../scripts/angular.js" /> 
/// <reference path="../scripts/angular-mocks.js" /> 

var app = angular.module('myApp', []); 

app.factory("dataService", ["$http", "$q", function ($http, $q) { 
    var _test = function() { 
     return "Hello world"; 
    }; 
    return { 
     test: _test, 
    }; 
}]); 


var testController = ["$scope", "dataService", 
function ($scope, dataService) { 
    $scope.data = dataService; // This is similar to a DAL 
}]; 


describe('Tests my controller without mocks', function() { 

    var myScope; 
    var myDataService; 

    beforeEach(inject(function ($rootScope, $httpBackend, $controller) { 
     angular.module('myApp'); 
     myScope = $rootScope.$new(); 
     myDataService = $rootScope.dataService; 

     $controller('testController', { 
      $scope: myScope, 
      dataService: myDataService 
     }); 
    })); 

    it('should say Hello', function() { 
     expect(myScope.data.test).toBe("Hello world"); 
    }); 

}); 

답변

1

당신은 angular.mock.module ('을 myApp')로 응용 프로그램을 부트 스트랩 할 필요가; beforeEach 메서드 내에서.

테스트 이름에서 실제 서비스 ("mocks without")를 사용하려는 것으로 보입니다. 이를 수행하기 위해 명시 적으로 $ controller를 호출하여 dataService 속성을 생략해야합니다. 실제 인스턴스를 연결합니다. var에 MyDataService로; beforeEach (angular.mock.module ('을 myApp 도와

+0

덕분에 여기 는 설명 작동 코드 (함수() { var에 마이 스코프'내 망신 시켰없이 컨트롤러를 테스트 ' ')); beforeEach은 (주입 (함수 ($ rootScope, $ httpBackend, $ 제어기) { 마이 스코프 = $ rootScope $ 새로운(); $ 컨트롤러. ('testController '{ $ 범위 : 마이 스코프 }) ; }})); –

관련 문제