加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

AngularJS karma过滤器未知提供者

发布时间:2020-12-17 06:50:58 所属栏目:安全 来源:网络整理
导读:我做不到!我只是看了整个互联网,我尝试了其他解决方案,但我无法使其工作. 我有一个过滤器,我想用Karma和Jasmine进行测试.这是我的代码: app.js: var services = angular.module('myApp.services',[ 'ngResource' ]);angular.module('myApp',[ 'ngRoute','
我做不到!我只是看了整个互联网,我尝试了其他解决方案,但我无法使其工作.

我有一个过滤器,我想用Karma和Jasmine进行测试.这是我的代码:

app.js:

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

angular.module('myApp',[
    'ngRoute','myApp.filters','myApp.services','myApp.directives','myApp.controllers'
]).

filters.js

'use strict';

/* Filters */

angular.module('myApp.filters',[])

.filter(
    'lowerAndCapital',[ function() {
        return function(text) {
            if (text != undefined) {
                var str = text.toLowerCase();
                var arreglo = str.split(" ");
                var result = "";
                for (var i = 0; i < arreglo.length; i++) {
                    result += " "
                            + arreglo[i].charAt(0).toUpperCase()
                            + arreglo[i]
                                    .substring(1,arreglo[i].length + 1);
                }
                return result;
            }
        }
    }]);

filterSpecs.js

'use strict';

/* Jasmine specification for filters go here */

describe('filter',function() {

    beforeEach(function () {
        module('myApp.filters');
    });

    describe('lowerAndCapital',function() {
        it('deberia de convertir le texto a minuscula y con letra capital',inject(function(lowerAndCapital) {
                expect(lowerAndCapital("john")).toEqual(
                         "John");
        }));
    });
});

karma.config.js

module.exports = function(config){
    config.set({

        basePath : '../',files : [
            'main/webapp/resources/scripts/angular/angular.js','main/webapp/resources/scripts/angular/angular-route.js','main/webapp/resources/scripts/angular/angular-mocks.js','main/webapp/resources/js/*.js','test/unit/*.js'
        ],autoWatch : true,frameworks: ['jasmine'],browsers : ['Chrome'],plugins : [
                'karma-chrome-launcher','karma-firefox-launcher','karma-jasmine','karma-junit-reporter'
                ],junitReporter : {
          outputFile: 'test_out/unit.xml',suite: 'unit'
        }
    });
};

这是错误:

Chrome 36.0.1985 (Windows 7) filter lowerAndCapital deberia de convertir le text
o a minuscula y con letra capital FAILED
        Error: [$injector:unpr] Unknown provider: lowerAndCapitalProvider <- low
erAndCapital
        http://errors.angularjs.org/1.2.16/$injector/unpr?p0=lowerAndCapitalProv
ider%20%3C-%20lowerAndCapital
            at E:/workspace/GPS/src/main/webapp/resources/scripts/angular/angula
r.js:78:12
            at E:/workspace/GPS/src/main/webapp/resources/scripts/angular/angula
r.js:3705:19
            at Object.getService [as get] (E:/workspace/GPS/src/main/webapp/reso
urces/scripts/angular/angular.js:3832:39)
            at E:/workspace/GPS/src/main/webapp/resources/scripts/angular/angula
r.js:3710:45
            at getService (E:/workspace/GPS/src/main/webapp/resources/scripts/an
gular/angular.js:3832:39)
            at Object.invoke (E:/workspace/GPS/src/main/webapp/resources/scripts
/angular/angular.js:3859:13)
            at workFn (E:/workspace/GPS/src/main/webapp/resources/scripts/angula
r/angular-mocks.js:2147:20)
        Error: Declaration Location
            at window.inject.angular.mock.inject (E:/workspace/GPS/src/main/weba
pp/resources/scripts/angular/angular-mocks.js:2132:25)
            at null.<anonymous> (E:/workspace/GPS/src/test/unit/filtersSpec.js:1
5:5)
            at null.<anonymous> (E:/workspace/GPS/src/test/unit/filtersSpec.js:1
2:2)
            at E:/workspace/GPS/src/test/unit/filtersSpec.js:5:1
Chrome 36.0.1985 (Windows 7): Executed 1 of 1 (1 FAILED) ERROR (0.359 secs / 0.0
14 secs)

解决方法

您应该尝试注入 filterprovider并获得lowerAndCapital过滤器.

var $filter;

beforeEach(function () {
   module('app');
});

beforeEach( inject(function (_$filter_) { //<-- Get the filter provider
   $filter = _$filter_;
}));

it('deberia de convertir le texto a minuscula y con letra capital',function(){
   expect($filter('lowerAndCapital')("john")).toEqual("John");
});

Plnkr

或者使用“过滤器”将您的filtername Postfix并使用它

beforeEach( inject(function (_lowerAndCapitalFilter_) {
   $filter = _lowerAndCapitalFilter_;
}));

Filters are just functions which transform input to an output. However filters need to be Dependency Injected. To achieve this a filter definition consists of a factory function which is annotated with dependencies and is responsible for creating a filter function.

但是由于split(“”),代码中存在一个错误,因此您可能希望修剪返回的结果.

Demo

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读