$injector:unpr 未知提供者:modalInstanceProvider <- modalInstance
$injector:unpr Unknown provider: modalInstanceProvider <- modalInstance
我一直收到错误:[$injector:unpr] 未知提供者:modalInstanceProvider <- modalInstance
我觉得我非常接近能够从这个测试中继续前进,但我一直被卡住了。如果有人有任何提示,我将不胜感激。我在这个测试上花了几天时间,但运气不佳。
谢谢
Ctrl 测试
describe('DeleteModalController', function () {
//make module avalible to tests
beforeEach(module('pb.accounts.controllers'));
beforeEach(module('ui.router'));
beforeEach(module('ui.bootstrap'));
var $controller;
var mockGlobal = { activeOrganizationId: 0 };
var mockStateParams = { orgId: 1, entityId: null };
var mockForm = {};
var mockState = {};
var mockAccountSrv = {
account: {
entityId: 2,
page: 19,
length: 200
},
accounts: {
entityId: 2,
page: 19,
length: 200
}
};
// instantiating controller
beforeEach(inject(function (_$controller_) {
$controller = _$controller_;
}));
describe("Account service delete() function", function () {
var controller, scope;
// sets scope of controller before each test
beforeEach(inject(function ($rootScope, _$modal_, _$modalInstance_) {
scope = $rootScope.$new();
controller = $controller('DeleteModalController',
{
$modal: _$modal_,
modalInstance: _$modalInstance_,
$scope: scope,
$stateParams: mockStateParams,
$state: mockState,
global: mockGlobal,
accountService: mockAccountSrv
});
}));
it("make sure service promise resolves", function () {
scope.delete(mockAccountSrv.account);
spyOn(modalInstance, "close");
scope.$digest();
expect(modalInstance.close).toHaveBeenCalled();
});
});
});
DeleteCtrl
angular.module('pb.accounts.controllers')
.controller('DeleteModalController', ['global', '$scope', 'accountService', '$modal', '$modalInstance', 'account', function (global, $scope, accountService, $modal, $modalInstance, account) {
$scope.account = account;
$scope.delete = function (account) {
global.setFormSubmitInProgress(true);
accountService.deleteAccount(global.activeOrganizationId, account.entityId).then(function () {
global.setFormSubmitInProgress(false);
$modalInstance.close();
},
function (errorData) {
global.setFormSubmitInProgress(false);
});
};
$scope.cancel = function () {
global.setFormSubmitInProgress(false);
$modalInstance.dismiss('cancel');
};
}]);
账户控制
angular.module('pb.accounts.controllers')
.controller('AccountsController', ['$scope', '$q', '$stateParams', '$state', '$timeout', '$modal', 'global', 'accountService', function ($scope, $q, $stateParams, $state, $timeout, $modal, global, accountService) {
var init = function () {
global.activeOrganizationId = $stateParams.orgId || 0;
$scope.global = global;
$scope.partialViews = {
form: "/app/accounts/views/_form.html"
};
$scope.currentEntityId = $stateParams.entityId || 0;
};
init();
$scope.getAll = function (page, length) {
accountService.getAccounts(global.activeOrganizationId, page, length).then(function (data) {
$scope.accounts = data;
});
};
$scope.get = function (entityId) {
accountService.getAccount(global.activeOrganizationId, entityId).then(function (data) {
$scope.account = data;
});
};
$scope.add = function (form, account) {
form.submitIfValid(
function () {
return accountService.createAccount(global.activeOrganizationId, account);
}).then(function (data) {
$state.go('accounts.campaigns.list', { orgId: global.activeOrganizationId, accountId: data.entityId });
});
};
$scope.edit = function (form, account) {
form.submitIfValid(
function () {
return accountService.updateAccount(global.activeOrganizationId, account)
}).then(function (data) {
$state.go('accounts.campaigns.list', { orgId: global.activeOrganizationId, accountId: account.entityId });
});
};
$scope.confirmDelete = function (account) {
var modalInstance = $modal.open({
templateUrl: '/app/accounts/views/_delete.html',
controller: 'DeleteModalController',
resolve: {
account: function () {
return account;
}
}
});
modalInstance.result.then(function (asset) {
$scope.getAll(1, 100);
}, function () {
console.log('Modal dismissed at: ' + new Date());
});
};
}]);
我想你应该使用 $modalInstance
来初始化你的控制器而不是 modalInstance
controller = $controller('DeleteModalController', {
$modal: _$modal_,
$modalInstance: _$modalInstance_,
$scope: scope,
$stateParams: mockStateParams,
$state: mockState,
global: mockGlobal,
accountService: mockAccountSrv
});
$modalInstance
是作为 $modal
调用的一部分创建的,它不是全局依赖项,因此您不能:
beforeEach(inject(function ($rootScope, _$modal_, _$modalInstance_) {
您需要做的是创建一个虚拟 $modalInstance
或具有与 $modalInstance
.
相同功能的间谍
像这样:
modalInstance = { // Create a mock object using spies
close: jasmine.createSpy('modalInstance.close'),
dismiss: jasmine.createSpy('modalInstance.dismiss'),
result: {
then: jasmine.createSpy('modalInstance.result.then')
}
};
从此答案中删除Unit testing a modalInstance controller with Karma / Jasmine
我一直收到错误:[$injector:unpr] 未知提供者:modalInstanceProvider <- modalInstance 我觉得我非常接近能够从这个测试中继续前进,但我一直被卡住了。如果有人有任何提示,我将不胜感激。我在这个测试上花了几天时间,但运气不佳。
谢谢
Ctrl 测试
describe('DeleteModalController', function () {
//make module avalible to tests
beforeEach(module('pb.accounts.controllers'));
beforeEach(module('ui.router'));
beforeEach(module('ui.bootstrap'));
var $controller;
var mockGlobal = { activeOrganizationId: 0 };
var mockStateParams = { orgId: 1, entityId: null };
var mockForm = {};
var mockState = {};
var mockAccountSrv = {
account: {
entityId: 2,
page: 19,
length: 200
},
accounts: {
entityId: 2,
page: 19,
length: 200
}
};
// instantiating controller
beforeEach(inject(function (_$controller_) {
$controller = _$controller_;
}));
describe("Account service delete() function", function () {
var controller, scope;
// sets scope of controller before each test
beforeEach(inject(function ($rootScope, _$modal_, _$modalInstance_) {
scope = $rootScope.$new();
controller = $controller('DeleteModalController',
{
$modal: _$modal_,
modalInstance: _$modalInstance_,
$scope: scope,
$stateParams: mockStateParams,
$state: mockState,
global: mockGlobal,
accountService: mockAccountSrv
});
}));
it("make sure service promise resolves", function () {
scope.delete(mockAccountSrv.account);
spyOn(modalInstance, "close");
scope.$digest();
expect(modalInstance.close).toHaveBeenCalled();
});
});
});
DeleteCtrl
angular.module('pb.accounts.controllers')
.controller('DeleteModalController', ['global', '$scope', 'accountService', '$modal', '$modalInstance', 'account', function (global, $scope, accountService, $modal, $modalInstance, account) {
$scope.account = account;
$scope.delete = function (account) {
global.setFormSubmitInProgress(true);
accountService.deleteAccount(global.activeOrganizationId, account.entityId).then(function () {
global.setFormSubmitInProgress(false);
$modalInstance.close();
},
function (errorData) {
global.setFormSubmitInProgress(false);
});
};
$scope.cancel = function () {
global.setFormSubmitInProgress(false);
$modalInstance.dismiss('cancel');
};
}]);
账户控制
angular.module('pb.accounts.controllers')
.controller('AccountsController', ['$scope', '$q', '$stateParams', '$state', '$timeout', '$modal', 'global', 'accountService', function ($scope, $q, $stateParams, $state, $timeout, $modal, global, accountService) {
var init = function () {
global.activeOrganizationId = $stateParams.orgId || 0;
$scope.global = global;
$scope.partialViews = {
form: "/app/accounts/views/_form.html"
};
$scope.currentEntityId = $stateParams.entityId || 0;
};
init();
$scope.getAll = function (page, length) {
accountService.getAccounts(global.activeOrganizationId, page, length).then(function (data) {
$scope.accounts = data;
});
};
$scope.get = function (entityId) {
accountService.getAccount(global.activeOrganizationId, entityId).then(function (data) {
$scope.account = data;
});
};
$scope.add = function (form, account) {
form.submitIfValid(
function () {
return accountService.createAccount(global.activeOrganizationId, account);
}).then(function (data) {
$state.go('accounts.campaigns.list', { orgId: global.activeOrganizationId, accountId: data.entityId });
});
};
$scope.edit = function (form, account) {
form.submitIfValid(
function () {
return accountService.updateAccount(global.activeOrganizationId, account)
}).then(function (data) {
$state.go('accounts.campaigns.list', { orgId: global.activeOrganizationId, accountId: account.entityId });
});
};
$scope.confirmDelete = function (account) {
var modalInstance = $modal.open({
templateUrl: '/app/accounts/views/_delete.html',
controller: 'DeleteModalController',
resolve: {
account: function () {
return account;
}
}
});
modalInstance.result.then(function (asset) {
$scope.getAll(1, 100);
}, function () {
console.log('Modal dismissed at: ' + new Date());
});
};
}]);
我想你应该使用 $modalInstance
来初始化你的控制器而不是 modalInstance
controller = $controller('DeleteModalController', {
$modal: _$modal_,
$modalInstance: _$modalInstance_,
$scope: scope,
$stateParams: mockStateParams,
$state: mockState,
global: mockGlobal,
accountService: mockAccountSrv
});
$modalInstance
是作为 $modal
调用的一部分创建的,它不是全局依赖项,因此您不能:
beforeEach(inject(function ($rootScope, _$modal_, _$modalInstance_) {
您需要做的是创建一个虚拟 $modalInstance
或具有与 $modalInstance
.
像这样:
modalInstance = { // Create a mock object using spies
close: jasmine.createSpy('modalInstance.close'),
dismiss: jasmine.createSpy('modalInstance.dismiss'),
result: {
then: jasmine.createSpy('modalInstance.result.then')
}
};
从此答案中删除Unit testing a modalInstance controller with Karma / Jasmine