将复杂的角度控制器注入茉莉花
Injecting complex Angular controller into Jasmine
我的任务是开始围绕一些遗留的Angular代码编写测试。 而且,我是 Angular 的新手和茉莉花的初学者。
看到了另一个类似的帖子,但作者回答了他的文件,添加了引用路径。 我不相信我有这个问题。
尝试从 Angular 模块注入控制器,以便我可以围绕其内部方法编写测试,在本例中为"addPayment"函数。
我继续收到$injector错误,但我太困惑了,无法理解如何解决它。 我相信这与控制器的依赖项有关,但我不明白纠正它所需的语法。
应用程序.js :
'use strict'
angular.module('AdminDashboard', ['ui.router', 'toastr', 'ui.bootstrap', 'checklist-model', 'ngSanitize', 'ngCsv', 'ngResource', 'angular-spinkit'])
.config(function(toastrConfig) {
angular.extend(toastrConfig, {
timeout: 5000
});
});
控制器.js :
angular.module('AdminDashboard')
.controller('MakePaymentCtrl', ['$scope', '$state', '$stateParams', '$location', '$sce', 'paymentsFactory', '$resource', '$log', '$q', '$modal', 'toastr', function ($scope, $state, $stateParams, $location, $sce, paymentsFactory, $resource, $log, $q, $modal, toastr) {
var controller = this;
controller.loading = true;
controller.loading = true;
controller.submittedPayments = [];
controller.canPostDatePayments = function () {
return controller.CustomerModel.CanPostDatePayments.Item1;
}
controller.addPayment = function () {
var newPayment = { PaymentId: 0, Agent: controller.agent };
if (!controller.CustomerModel.CanPostDatePayments.Item1) {
newPayment.ScheduledDate = moment().format('L');
}
controller.submittedPayments.push(newPayment);
}
}]);
测试.js :
///<reference path="~/Scripts/jasmine/jasmine.js"/>
///<reference path="../../../../../../../../Scripts/angular.min.js"/>
///<reference path="../../../../../../../../Scripts/angular-mocks.js"/>
///<reference path="../../../../../../../../../Web.Payments/Areas/Admin/Scripts/dashboard/app.js"/>
///<reference path="../../../../../../../../../Web.Payments/Areas/Admin/Scripts/dashboard/payments/controllers/Controller.js"/>
describe('Controller: public/MakePaymentCtrl', function() {
var $controller;
beforeEach(module('AdminDashboard'));
beforeEach(inject(function(_$controller_){
$controller = _$controller_;
$controller('MakePaymentCtrl');
}));
describe("controller.addPayment", function () {
it("Contains spec with expectation", function () {
expect(true).toBe(true);
});
});
});
是的
,您的依赖项注入未列出控制器。你需要做这样的事情:
beforeEach(inject(function(_$controller_, $rootScope, $state, $stateParams, $location, $sce, paymentsFactory, $resource, $log, $q, $modal, toastr){
$scope = $rootScope.$new();
$controller = _$controller_;
$controller('MakePaymentCtrl', {$scope:$scope,$state:$state,$stateParams:$stateParams,$location:$location', $sce:$sce,paymentsFactory:paymentsFactory,$resource:$resource,$log:$log,$q:$q, $modal:$modal,toastr:toastr};
}));
此外,在控制器中具有$resource通常不是好的做法。您通常会在服务或工厂中看到这一点。当给定遗留代码时,请始终尽可能尝试清理它。
相关文章:
- Ionic将firebase注入工厂,同时将控制器和服务保存在不同的文件中
- 将方法从控制器注入到未使用右变量调用的指令
- 无法在routeprovider中注入控制器
- 我可以将控制器注入到这个 Formly 选择框对象中吗?
- 如何在angularjs中为每个控制器注入一个独特的模块
- 在 angularJS 中向控制器注入服务失败
- AngularJS 控制器注入依赖关系 - 为什么构造函数有 []
- 将复杂的角度控制器注入茉莉花
- 向控制器注入服务会收到 unpr 错误
- 在 AngularJS 中将一个控制器注入另一个控制器时出错
- $scope不会使用点表示法从控制器注入/继承到指令
- 只有在需要时才向控制器注入Angular服务
- 在angular js中向控制器注入常量(模式弹出问题)
- 如何在angularjs中手动从控制器注入部分
- 为控制器注入解析参数
- 通过ng-init向控制器注入变量
- 直接向AngularJS指令控制器注入服务
- 在向控制器注入服务时重复声明
- 无法向控制器注入服务
- AngularJS从控制器注入部分视图