EDIT: быстрое и грязное решение в конце этого сообщения
Я использую модальное окно из AngularUI-Bootstrap так же, как это объясняется на веб-сайте, за исключением того, что я разбил файлы. Поэтому я:
CallingController.js:
$scope.delete = function () {
if ($scope.selected.length > 0) {
// [...]
// preparing data
// [...]
var modalInstance = $modal.open({
templateUrl: 'views/modalView.html',
controller: 'modalCtrl',
resolve: {
itemArray: function () {
return $scope.selected;
}
}
});
modalInstance.result.then(function (confirm) {
if (confirm === true) {
// [...]
// treat
// [...]
}
});
}
};
modalController.js:
myAppControllers.controller('modalCtrl',
function ($scope, $modalInstance, itemArray) {
$scope.accept = function () {
$modalInstance.close(true);
};
$scope.reject = function () {
$modalInstance.close(false);
};
$scope.itemArray = itemArray;
});
и когда я тестирую этот код с помощью Karma (с файлом ui-bootstrap-tpls.min.js, загруженным в файл конфигурации кармы), я получаю следующую ошибку: Ошибка: [$ injector: unpr] [http://errors.angularjs.org/1.2.15-build.2389+sha.c5f2f58/ $injector/unpr? p0 =% 24modalInstanceProvider %20% 3C- %20% 24modalInstance] 1 в Error (native), что означает, что jasmine не удается найти поставщика для $modalInstance.
Я даже не тестирую материал на этом контроллере, пока нет, но вот мой тестовый файл жасмина:
testModalController.js:
describe('Controller: modalCtrl', function () {
beforeEach(module('myApp'));
var Ctrl;
var scope;
// Initialize the controller and a mock scope
beforeEach(inject(
function ($controller, $rootScope) {
scope = $rootScope.$new();
Ctrl = $controller('modalCtrl', { $scope: scope });
})
);
describe('Initial state', function () {
it('should instantiate the controller properly', function () {
expect(Ctrl).not.toBeUndefined();
});
it('should initialize its values properly', function () {
});
});
});
У вас есть какие-либо сведения об этой проблеме? Это не первый "внешний" модуль, который я использую (и проверяю), и я делал то же самое, что и для других, за исключением того, что на этот раз он не работает, и я понятия не имею, почему.
==========================================
EDIT: быстрое и, возможно, грязное решение:
Хорошо, поэтому, основываясь на методе издевательства в контенте контроллера Jasmine, я понял, как я могу "решить" мою проблему, но это, вероятно, довольно грязно, поэтому не стесняйтесь комментировать, если вы найдете лучший способ сделать что я намерен.
testModalController.js:
describe('Controller: modalCtrl', function () {
beforeEach(module('myApp'));
var Ctrl;
var scope;
var modalInstance;
// Initialize the controller and a mock scope
beforeEach(inject(
function ($controller, $rootScope, _$modal_) {
scope = $rootScope.$new();
modalInstance = _$modal_.open({
templateUrl: 'views/modalView.html'
});
Ctrl = $controller('modalCtrl', {
$scope: scope,
$modalInstance: modalInstance,
itemArray: function () { return ['a', 'b', 'c']; }
});
})
);
describe('Initial state', function () {
it('should instantiate the controller properly', function () {
expect(Ctrl).not.toBeUndefined();
});
it('should initialize its values properly', function () {
});
});
});
Таким образом, Jasmine больше не ищет поставщиков, потому что вы уже ввели те предметы, которые, как предполагается, нуждаются в этих провайдерах. Это работает, но я считаю, что это можно было бы сделать лучше...