Я пытаюсь настроить единичный тест в карме, чтобы проверить угловой контроллер 1. *. Каждый раз, когда я запускаю код я получаюУгловой 1. * не удалось получить доступ к контроллеру в тесте на измерение кармы (webpack)
[ng:areq] Argument 'MoviesListCtrl' is not a function, got undefined
Когда я проверил модуль для контроллера появляется, чтобы напиваться, так что я не знаю, почему его не загружается. Мой проект можно найти здесь ..
Я проект доступен на BitBucket в
https://bitbucket.org/LAD500/movies-angular-webpack/src
запустить тесты ..
npm install
npm test
Любая помощь с этим была бы оценена ,
Файлы Я работаю с и ..
import '../../../../../src/js/app/services/movieslisting/';
import '../../../../../src/js/app/directives/movieslist/movieslistctrl';
import '../../../../../src/js/app/browserapp.js';
import {expect} from 'chai';
let createCtrl, scope, moviesListing;
beforeEach(angular.mock.module('BrowserApp'));
beforeEach(inject(($rootScope, $controller)=>{
moviesListing = angular.injector(['ng', 'BrowserApp']).get("moviesListing");
scope = $rootScope.$new();
createCtrl =()=>{
return $controller('MoviesListCtrl', {
$scope: scope,
moviesListing: moviesListing
});
};
}));
describe('MoviesListCtrl',()=>{
it('placeholder test',()=>{
let ctrl = createCtrl();
expect(1).to.equal(1);
});
});
контроллер
import app from '../../browserapp';
let controllerName = 'MoviesListCtrl';
app.controller('MoviesListCtrl', ['$scope', 'moviesListing', function($scope, moviesListing) {
$scope.moviesList = {
moviesFilter: 'costLowToHigh',
movies: moviesListing.movieCollection
};
$scope.createMovieHeader = movie =>{
let prefix = `${movie.title} (${movie.category}`;
return movie.subcategory ? `${prefix}/${movie.subcategory})` : `${prefix})`;
};
$scope.updateFilter =()=>{
moviesListing.sortMovies($scope.moviesList.moviesFilter);
};
}]);
export default controllerName;
сервис вот зависимость
import app from '../../browserapp';
let factoryName = 'moviesListing';
app.factory(factoryName, [function() {
let movieCollection = [];
let currentSortKey = 'costLowToHigh';
let costLowToHigh = (a, b)=>{
if (a.castListTotalCost > b.castListTotalCost) {
return 1;
}
if (a.castListTotalCost < b.castListTotalCost) {
return -1;
}
return 0;
};
let costHighToLow = (a, b)=>{
if (a.castListTotalCost < b.castListTotalCost) {
return 1;
}
if (a.castListTotalCost > b.castListTotalCost) {
return -1;
}
return 0;
};
let sortFunctionsLookup = {
costLowToHigh,
costHighToLow
};
let castListTotalCost = movie => movie.actors.reduce((total, actor) => total + actor.salary, 0);
let addMovie = (movie)=>{
movie.castListTotalCost = castListTotalCost(movie);
movieCollection.push(movie);
movieCollection.sort(sortFunctionsLookup[currentSortKey]);
};
let sortMovies = (sortKey)=>{
currentSortKey = sortKey;
movieCollection.sort(sortFunctionsLookup[currentSortKey]);
};
let reset =()=>{
movieCollection.length = 0;
};
return {
movieCollection,
addMovie,
sortMovies,
reset
};
}]);
export default factoryName;
модуль приложения
import * as angular from 'angular';
var app = angular.module('BrowserApp', []);
app.init =()=>{
angular.element(document).ready(function() {
angular.bootstrap(document, ['BrowserApp']);
});
};
export default app;
Карма конфигурации
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['mocha', 'es6-shim'],
files: [
'./node_modules/angular/angular.js',
'./node_modules/angular-mocks/angular-mocks.js',
'test/**/*spec.js'
],
preprocessors: {
'test/**/*spec.js': ['webpack', 'sourcemap']
},
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: false,
browsers: ['PhantomJS'],
singleRun: true,
concurrency: Infinity,
webpack: {
devtool: 'inline-source-map',
module: {
loaders: [
{test: /\.js$/, exclude: /node_modules/, loader:"babel-loader"},
{ test: /\.html$/, loader: "html" }
]
},
htmlLoader: {
attrs: false
}
},
webpackMiddleware: {
noInfo: true
}
})
}