2015-01-03 24 views
12

Tôi nhận được lỗi này: "Lỗi: [$ injector: unh] Nhà cung cấp không xác định: $ provideProvider < - $ provide". Tôi đã bị mắc kẹt hàng giờ vì googling xung quanh. Tôi đã nhìn thấy nhiều ví dụ, nơi nó được thực hiện theo cách này và tôi không chắc chắn về những gì để làm.

"use strict"; 


describe('Controller: ProfileCtrl', function ($provide) { 
    //load the controller's module 
    var mockProfileFactory; 
    beforeEach(function() { 
     module('profileUpdate', function($provide) { 
      mockProfileFactory = { 
       get: function() { 
        id: 16 
       } 
      }; 
      $provide.value('Profile', mockProfileFactory); 
     }); 
     var ProfileCtrl; 
     var scope; 

    inject(function ($controller, $rootScope, $provide) { 

     scope = $rootScope.$new(); 
     ProfileCtrl = $controller('ProfileCtrl', { 
      $scope: scope 
     }); 
    }); 
}); 

it('should have 3 items', function() { 
    var things = scope.range(1,3,1); 
    expect(things).toBe(3); 
}); 

});

Trả lời

16

Bạn đã nhận được một số tiền thưởng. Cụ thể là một trong tuyên bố tiêm. Bạn không thể tiêm cung cấp, nó chỉ có sẵn cho các mô-đun. Hãy thử các thay đổi của tôi bên dưới.

"use strict"; 


// SEE no provide here 
describe('Controller: ProfileCtrl', function() { 
    //load the controller's module 
    var mockProfileFactory; 
    beforeEach(function() { 
     module('profileUpdate', function($provide) { 
      mockProfileFactory = { 
       get: function() { 
        id: 16 
       } 
      }; 
      $provide.value('Profile', mockProfileFactory); 
     }); 
     var ProfileCtrl; 
     var scope; 
     // SEE and neither in the inject here 
    inject(function ($controller, $rootScope) { 

     scope = $rootScope.$new(); 
     ProfileCtrl = $controller('ProfileCtrl', { 
      $scope: scope 
     }); 
    }); 
}); 

it('should have 3 items', function() { 
    var things = scope.range(1,3,1); 
    expect(things).toBe(3); 
}); 

});

Có một chi về khái niệm angularjs các nhà cung cấp, và cũng có thể kiểm tra mã của bạn chống lại hướng dẫn này:

http://nathanleclaire.com/blog/2013/12/13/how-to-unit-test-controllers-in-angularjs-without-setting-your-hair-on-fire/

+1

Tôi đã cố gắng để khắc phục điều này từ rất lâu mà tôi mất tâm trí của tôi và không để ý thêm $ cung cấp từ lần thử đầu tiên của tôi. Cảm ơn bạn, sau khi loại bỏ $ cung cấp, nó chạy! và cảm ơn cho liên kết, tôi sẽ chắc chắn để kiểm tra xem nó ra: D – user2170878

+0

'// SEE và không có trong tiêm ở đây' có nghĩa là gì? – isherwood

+0

thu hút sự chú ý đến những thay đổi quan trọng (đó là nơi tôi đã xóa $ cung cấp) –

1

$ cung cấp là nhà cung cấp, bạn chỉ có thể tiêm $ cung cấp trong phương thức app.config, không theo phương thức điều khiển .

Các vấn đề liên quan