I can't make it work! I just looked all over the Internet, and I tried other solutions, but I can't make it work.
I got a filter, and I want to test with Karma and Jasmine. Here is my code:
var services = angular.module('myApp.services', [ 'ngResource' ]);
angular.module('myApp', [
'ngRoute',
'myApp.filters',
'myApp.services',
'myApp.directives',
'myApp.controllers'
]).
'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;
}
}
}]);
'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");
}));
});
});
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'
}
});
};
And here is the error:
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)
You should probably try inject filterprovider and get lowerAndCapital
filter.
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
Or Postfix your filtername with "Filter" and use it
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.
But there is a bug in your code because of split(" ")
so you may want to trim the result returned.
Demo
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With