【问题标题】:Stuck with "Unknown provider" error when attempting to inject dependency尝试注入依赖项时遇到“未知提供程序”错误
【发布时间】:2013-12-24 10:32:12
【问题描述】:

我正在尝试使用 Jamsine 对 Angular 服务进行单元测试,但我不知道如何为该服务注入依赖项。

这是我的app.js 文件,精简到基本内容:

"use strict";

angular.module("myApp", []);

(function (app) {

    app.factory("taskService", function ($http) {
        return {
            loadTasks: function (callback) {                
            }
        };
    });

    app.controller("AppController", function ($scope, $http, taskService) { 
    });
} (angular.module("myApp")));

这是 Jasmine 测试,再次精简到基本要素:

describe("taskService tests", function () {

    var svc = {};

    beforeEach(function () {

        angular.module("myApp");    

        // I also tried this, but not luck there either
        // angular.module("myApp", ['taskService']);            

        inject(function (taskService) { // Fails to inject the service.
            svc = taskService;
        });
    });    
});

运行测试时,我收到inject 无法解析taskService 的依赖关系的错误:

http://docs.angularjs.org/error/$injector:unpr?p0=taskServiceProvider%20%3C-%20taskService

我不知道在这里做什么。运行应用程序本身时,服务注入没有问题,例如

app.controller("AppController", function ($scope, $http, taskService) {

但我不确定如何在测试中手动进行注入。

【问题讨论】:

    标签: angularjs dependency-injection jasmine


    【解决方案1】:

    问题是您需要使用angular.mocks 而不是普通的角度来加载您的模块myApp。和注入东西一样,不能用plain angular,需要angular.mocksinject()

    所以只是改变:

    angular.module("myApp");
    

    为:

    module("myApp");
    

    或:

    angular.mock.module("myApp");
    

    注意module() 只是angular.mock.module() 的简写

    干杯。

    【讨论】:

    • 感谢您的回答。抱歉回复晚了,圣诞节不在。明天我会试试你的建议,我会回复你的。虽然可以公平地说你的答案看起来很理想。
    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 2015-07-16
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    相关资源
    最近更新 更多