2016-06-29 5 views
1

간단한 서비스를 만들고 jasmine-karma 환경에서 테스트하려고합니다.카르마 테스트에서 서비스에 제공자를 찾을 수 없음 오류가 발생했습니다

나는이 오류가 계속 몇 가지 이유를 들어 1.5.5

각도 사용한

Chrome 46.0.2490 (Windows 7 0.0.0) reddit api service should do something FAILED 
    Error: [$injector:unpr] Unknown provider: redditServiceProvider <- redditService 
    http://errors.angularjs.org/1.5.7/$injector/unpr?p0=redditServiceProvider%20%3C-%20redditService 
     at c:/client/www/vendor/angular/angular.js:68:12 
     at c:/client/www/vendor/angular/angular.js:4502:19 
     at Object.getService [as get] (c:/client/www/vendor/angular/angular.js:4655:39) 
     at c:/client/www/vendor/angular/angular.js:4507:45 
     at getService (c:/client/www/vendor/angular/angular.js:4655:39) 
     at injectionArgs (c:/client/www/vendor/angular/angular.js:4679:58) 
     at Object.invoke (c:/client/www/vendor/angular/angular.js:4701:18) 
     at Object.workFn (c:/client/node_modules/angular-mocks/angular-mocks.js:3078:20) 
    Error: Declaration Location 
     at window.inject.angular.mock.inject (c:/client/node_modules/angular-mocks/angular-mocks.js:3040:25) 
     at Suite.<anonymous> (c:/client/www/app/mine/myspec.spec.js:12:16) 
     at c:/client/www/app/mine/myspec.spec.js:7:3 
     at c:/client/www/app/mine/myspec.spec.js:52:3 
    TypeError: Cannot read property 'whenGET' of undefined 
     at Object.<anonymous> (c:/client/www/app/mine/myspec.spec.js:18:18) 
Chrome 46.0.2490 (Windows 7 0.0.0): Executed 1 of 1 (1 FAILED) (0 secs/0.049 secs) 
Chrome 46.0.2490 (Windows 7 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.048 secs/0.049 secs) 
29 06 2016 13:03:43.349:DEBUG [karma]: Run complete, exiting. 
29 06 2016 13:03:43.349:DEBUG [launcher]: Disconnecting all browsers 
29 06 2016 13:03:43.650:DEBUG [launcher]: Process Chrome exited with code 0 
29 06 2016 13:03:43.652:DEBUG [temp-dir]: Cleaning temp dir C:\Users\mine\AppData\Local\Temp\karma-78283773 
29 06 2016 13:03:44.892:DEBUG [launcher]: Finished all browsers 
[13:03:44] 'karma' errored after 15 s 
[13:03:44] Error: 1 

내 서비스 파일은 다음과 같습니다

angular.module("reddit",[]).service("userService", 
    function($http) { 
    return { 
     getSubredditsSubmittedToBy: function(user) { 
     return $http.get("http://api.reddit.com/user/" + user + "/submitted.json").then(function(response) { 
      var posts, subreddits; 

      posts = response.data.data.children; 

      // transform data to be only subreddit strings 
      subreddits = posts.map(function(post) { 
      return post.data.subreddit; 
      }); 

      // de-dupe 
      subreddits = subreddits.filter(function(element, position) { 
      return subreddits.indexOf(element) === position; 
      }); 

      return subreddits; 
     }); 
     } 
    }; 
    }); 

내 시험은 다음과 같습니다

(function(){ 
    "use strict"; 

    describe("reddit api service", function() { 
    var redditService, httpBackend; 

    beforeEach(module("reddit")); 

    beforeEach(inject(function (_redditService_, $httpBackend) { 
     redditService = _redditService_; 
     httpBackend = $httpBackend; 
    })); 

    it("should do something", function() { 
     httpBackend.whenGET("http://api.reddit.com/user/yoitsnate/submitted.json").respond({ 
     data: { 
      children: [ 
      { 
       data: { 
       subreddit: "golang" 
       } 
      }, 
      { 
       data: { 
       subreddit: "javascript" 
       } 
      }, 
      { 
       data: { 
       subreddit: "golang" 
       } 
      }, 
      { 
       data: { 
       subreddit: "javascript" 
       } 
      } 
      ] 
     } 
     }); 
     redditService.getSubredditsSubmittedToBy("yoitsnate").then(function(subreddits) { 
     expect(subreddits).toEqual(["golang", "javascript"]); 
     }); 
     httpBackend.flush(); 
    }); 

    }); 

})(); 

나는이 튜토리얼 (http://nathanleclaire.com/blog/2014/04/12/unit-testing-services-in-angularjs-for-fun-and-for-profit/)을 사용하여이 서비스를 만들었다. (나는 복사했다.) 나는 그것이 작동하고 계속되는 다른 문제가 있다고 가정한다. 나는 elses 코드와 테스트를 거친 어떤 서비스가 잘 동작한다. 내가 틀린 곳을 알려주세요. 감사합니다.

답변

1

문제는 Reddit 서비스의 이름 지정/주입 방법에 문제가있는 것처럼 보입니다. 서비스 파일에서 userService이라는 모듈을 만들지 만, 테스트에서 여러분은 내가 말할 수있는 것에서 존재하지 않는 redditService이라는 모듈을 주입하고 사용하고 있습니다. 당신이 이것을한다면, 그것이 효과가 있다고 생각합니다 :

beforeEach(inject(function (_userService_, $httpBackend) { 
    redditService = _userService_; 
    httpBackend = $httpBackend; 
})); 
+0

나는 어떻게 든 그것을 놓쳤습니다. 나는 또한 패키지 문제가 있다고 생각한다. 나는 다른 질문으로 그것을 게시 할 것이다. 고마워요 존 – manu

관련 문제