- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码:
vm.data = [{name: 'test-1'},{name: 'test-2'}];
function addRecords(data) {
vm.data.push(data);
}
function openPopup() {
$uibModal.open({
templateUrl: 'modal-popup/modal-popup.html',
controller: 'ModalPopupController',
controllerAs: 'vm',
resolve: {
id: _.constant('123')
}
}).result.then(addRecords);
}
试图模拟这个,下面是声明:
let allData = [{name: 'test-1'},{name: 'test-2'}];
let data = {name: 'test-3'};
beforeEach(inject(function (_$q_, _$rootScope_, _$componentController_, _$uibModal_) {
$q = _$q_;
$rootScope = _$rootScope_;
$scope = $rootScope.$new();
controller = _$componentController_;
$uibModal = _$uibModal_;
spyOn($uibModal, 'open').and.returnValue({
result: function() {
return $q.when(data);
}
});
vm = controller('bvcListings', {
$q,
data: allData,
$uibModal
});
$scope.$apply();
}));
describe('openPopup', function () {
it('should add records on modal results', function () {
vm.openPopup();
expect($uibModal.open).toHaveBeenCalled();
});
});
期望是,它应该添加:{name: 'test-3'}
作为现有数组的结果。
监视模态打开工作正常,但在获取结果后,它没有进入 addRecords 函数。我做错了什么?
检索到结果后需要在此处进行哪些更改才能进入回调函数。
最佳答案
.result.then
回调方法只有在调用modalInstance.close
方法时才会被调用,同时不要忘记传递data
来自 close
方法,类似于 modalInstance.close(data)
。
在继续测试之前,您需要在 openPopup
函数中进行一项更改。它应该返回 $uibModal.open
,它基本上返回新创建的模态实例。此后,您可以轻松地控制模态以在需要时调用 dismiss
/close
方法。
function openPopup() {
vm.modalInstance = $uibModal.open({
templateUrl: 'modal-popup/modal-popup.html',
controller: 'ModalPopupController',
controllerAs: 'vm',
resolve: {
id: _.constant('123')
}
});
vm.modalInstance.result.then(addRecords);
}
规范
$uibModal = _$uibModal_;
var data = {name: 'test-3'};
//creating fake modal which will help you to mock
var fakeModal = {
result: {
then: function(confirmCallback) {
//Store the callbacks
this.confirmCallBack = confirmCallback;
}
},
close: function( item ) {
//The user clicked OK on the modal dialog
this.result.confirmCallBack( item );
}
};
spyOn($uibModal, 'open').and.returnValue(fakeModal);
describe('It should data to vm.data when popup closed', function () {
it('should add records on modal results', function () {
vm.data = [{name: 'test-1'},{name: 'test-2'}];
let data = {name: 'test-3'};
vm.openPopup();
expect($uibModal.open).toHaveBeenCalled();
vm.modalInstance.close(data);
expect(vm.data.length).toBe(4);
expect(vm.data[3]).toBe(data);
});
});
Note:
fakeModal
has been referred from this post
关于javascript - 如何模拟 uibmodal 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44569618/
我有各种菜单项,它们在单击其中任何一个时都使用相同的 uibmodal。仅对于其中一个菜单选项,我希望 uibmodal 显示为较小的尺寸。我尝试了以下方法: $scope.profile = fun
我有各种菜单项,它们在单击其中任何一个时都使用相同的 uibmodal。仅对于其中一个菜单选项,我希望 uibmodal 显示为较小的尺寸。我尝试了以下方法: $scope.profile = fun
我正在使用 Bootstrap 的 $uibModal 在我的网络应用程序中制作表单。一切正常,只是在显示对话框后我无法关闭它。 我花了两天时间试图不在这里发布这样一个简单的问题,尤其是当我收到的相同
我一直在尝试使用工厂中的 uibModal,而不是在我的 Controller 中使用它。出现对话框,单击“确定”后字段数据返回到服务,但是,我不知道如何将数据返回到我的 Controller ,将数
我知道有很多关于这个问题的话题,但我尝试按照提供的解决方案进行操作,但没有成功。 我遵循的那个解决了错误Unknown provider: $uibModalInstanceProvider,是@Ge
我在模态中的模态上遇到问题。我需要让第二个模态位于第一个模态的顶部,但发生的情况是,第二个模态加载在第一个模态的后面。请帮忙。谢谢 用于打开模式的片段。 $uibModal.open({ te
我正在尝试集成 Angular 引导模式形式, 这是我的 Controller angular.module('app').controller('groupController',['groupSe
我想设置一个 httpInterceptor 以在 http 请求失败时显示一个常见的模式对话框。我正在使用 https://angular-ui.github.io/bootstrap/对于模态对话
angular .module('angProj') .controller('UserCtrl', ['$scope', '$uibModal', function ($sc
我开始学习如何使用 jasmine 进行单元测试。我在互联网上阅读了很多内容,但我无法解决我的问题。 我有一个带有 Controller 的指令。当我单击某个元素时,该 Controller 正在使用
我有一项从服务器获取数据的服务。成功检索数据后,我将传递给指令中的 $uimodal 。我的代码如下所述 问题是当我第一次运行我的应用程序时,控制台日志显示如下结果 在//输出 >> 之外调试 siz
我试图将 $uibModal 注入(inject)到我的项目中,但是当 Controller 加载时,我收到以下错误: Error: [$injector:unpr] Unknown provider
我有以下代码: vm.data = [{name: 'test-1'},{name: 'test-2'}]; function addRecords(data) { vm.data.push(
你能告诉我我的代码有什么问题吗?我得到了初始 HTML 页面,但是当我单击“打开”时,没有任何反应。甚至控制台也不会记录错误或任何其他更改。 应用程序.js var app = angular.mod
我想制作$uibModal下药时模态透明,停止拖动时模态不透明。 现在,我尝试了 jQuery fadeTo()和 fadeIn()可拖动停止事件的方法和 mouseup() 方法。模态变得透明但不会
我将 .draggable() 放在我的模式上,但它们只在第二次调用时起作用。模态是从服务文件中调用的。 服务文件: function callWarningModalService(data) {
尝试关闭由 $uibModal.open() 创建的模态窗口时,我收到 close is not a function 我已将问题减少到最少的代码: var app = angular.mod
我想不出正常的标题。对此感到抱歉。 所以问题是,在一个大项目中,具有大的业务逻辑,有很多模式。每个新的模态都是相同的代码,几乎没有什么变化,比如 templateUrl、 Controller 之类的
我创建了一个 AngularJs 指令,它将焦点设置到 html 元素。但它不适用于 $uibModal 元素: angular.module('ui.bootstrap.demo') .di
我在使用 ui.bootstrap.modal 时遇到这个错误: Error: $uibModal is undefined 模块: (function(angular) { /**
我是一名优秀的程序员,十分优秀!