angularjs – 我如何测试用Karma嘲笑的承诺?
发布时间:2020-12-17 17:07:15 所属栏目:安全 来源:网络整理
导读:我的代码是: $scope.openModal = openModal; function openModal(data){ var info = data || {} ModalService.showModal({ templateUrl: ENVApp+"/myview.html",controller: "ModalController",inputs: { icon : "",title: "Additional",data : info } }).t
我的代码是:
$scope.openModal = openModal; function openModal(data){ var info = data || {} ModalService.showModal({ templateUrl: ENVApp+"/myview.html",controller: "ModalController",inputs: { icon : "",title: "Additional",data : info } }).then(function (modal) { modal.element.modal(); modal.close.then(function (res) { if(res.data != 'cancel'){ if(!res.data.id){ create(res) }else{ update(res) } } }); }); } 用Karma测试这个的正确方法是什么?这是我到目前为止所拥有的: 在我的beforeEach中: this.ModalService = { showModal: function(obj) { var deferred = $q.defer(); deferred.resolve({ element: { modal: jasmine.createSpy(),close: function() { var deferred2 = $q.defer(); return deferred2.promise; } } }); return deferred.promise; } }; this.UserService = { user: { id: 2 },updateCategory: function(data,type) { var deferred = $q.defer(); deferred.resolve({ data: { rows: 'response' } }); return deferred.promise; } } this.controller = $controller('ProfileAdditionalController',{ '$scope': this.scope,'$rootScope': this.rootScope,'$state': this.state,"$stateParams": this.stateParams,'ModalService': this.ModalService,'UserService': this.UserService,'ResourceService': this.ResourceService,'$upload': this.upload,'userData': this.userData }); 对于我的实际测试: it('should open a modal when requested',function() { this.scope.openModal(); expect(this.ModalService.showModal) }); 但这并没有多大意义.思考? 解决方法
要在控制器上测试openModal函数,基本上您要验证以下内容(3个测试)
>使用一些特定选项调用ModalService.showModal 首先,您可能需要在ModelService.showModal上设置间谍(模拟): 现在在你的测试中,你将触发函数和$scope.$digest调用: $scope.openModal(data); $scope.$digest() // to propagate the `resolve()` result of the promise) 这将触发第一个然后回调,(将mockModal作为参数传递),然后您可以验证其行为. 类似于验证第二个回调,您需要模拟已解析的模态对象. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |