Javascript 角度Jasmine UI路由器将解析值注入测试

Javascript 角度Jasmine UI路由器将解析值注入测试,javascript,angularjs,jasmine,angular-ui-router,karma-runner,Javascript,Angularjs,Jasmine,Angular Ui Router,Karma Runner,在我的Angular应用程序中,UI路由器将承诺解析为控制器。当尝试测试此控制器时,Karma正在抱怨未知的提供者。如何向测试中注入一个伪对象来表示这个解析对象 我的应用程序代码类似于: angular.module('myapp') .config(function($stateProvider, $urlRouterProvider) { $stateProvider .state('tab.name', { ... resolve: {

在我的Angular应用程序中,UI路由器将承诺解析为控制器。当尝试测试此控制器时,Karma正在抱怨未知的提供者。如何向测试中注入一个伪对象来表示这个解析对象

我的应用程序代码类似于:

angular.module('myapp')
.config(function($stateProvider, $urlRouterProvider) {
    $stateProvider
    .state('tab.name', {
        ...
        resolve: {
            allTemplates: function(Templates) {
                return Templates.all().then(function(templates) {
                    return templates;
                });
            }
        }
    })
})
.controller('QueriesCtrl', function(allTemplates, UserQuery) {
    var vm = this;
    vm.queries = allTemplates;
    vm.goToUrl = function(index, data) {
        var processedUrl = UserQuery.process(data, vm.queryTyped[index]);
        UserQuery.goToUrl(processedUrl);
    };
});
当尝试运行测试时,我得到了错误

Unknown provider: allTemplatesProvider <- allTemplates <- QueriesCtrl

由于单元测试中没有涉及任何路由,因此必须将
allTemplates
作为正常对象注入
$controller
函数。你能试试吗

controller = $controller('QueriesCtrl as ctrl', {
                '$scope': scope,
                 'allTemplates':allTemplates 
            });
否则,您可以使用
$provide
API创建虚拟服务

 module(function ($provide) {
    $provide.value("allTemplates", {[{a:1}, {a:2}, {b:3}]});

在每个块之前,在你的
块中做第一件事。

@Chandermani,我是摩卡柴的新手,请帮我解决类似问题,发布在
 module(function ($provide) {
    $provide.value("allTemplates", {[{a:1}, {a:2}, {b:3}]});