【发布时间】:2024-01-23 02:28:01
【问题描述】:
我使用 jasmine 为控制器编写单元测试,我必须检查一个函数是否在 $scope.$watch 上工作。我使用'controller as' 语法,但我已经注入$scope 来创建一个观察者。但是,我的测试在$scope.$apply() 上抛出了一个模糊的异常。这是我的控制器:
OrderController.$inject = ['Order', 'cart',
'$mdDialog', '$state', '$rootScope', '$scope'];
function OrderController(Order, cart, $mdDialog, $state, $rootScope, $scope) {
var vm = this;
vm.order = new Order({
name: '',
phone: '',
address: ''
});
vm.order.items = [];
vm.promoCode = '';
vm.order.promo_code = false;
$scope.$watch('vm.promoCode', function () {
if (vm.promoCode && vm.promoCode == 'm7e17')) {
vm.order.promo_code = true;
}
}); }
这是我的测试:
describe('Order Controller', function () {
var OrderController, CartService, $scope;
var item = {};
beforeEach(angular.mock.module('app'));
beforeEach(angular.mock.module('app.services'));
beforeEach(inject(function ($controller, _$rootScope_, _cart_, $state, $mdDialog) {
$scope = _$rootScope_.$new();
CartService = _cart_;
CartService.add(item);
OrderController = $controller('OrderController',
{
$scope: $scope,
$rootScope: _$rootScope_,
cart: CartService,
$state: $state,
$mdDialog: $mdDialog
}
);
}));
it('Should save a boolean whether a promo code has been entered', function () {
expect(OrderController.order.promo_code).toBe(false);
OrderController.promoCode = 'm7e17';
$scope.$apply();
expect(OrderController.order.promo_code).toBe(true);
}); });
但是,当我在规范中调用 $scope.$apply 时,它会引发错误:'Possibly unhandled rejection: ru thrown'。在互联网上找不到任何关于它的信息,所以我在这里做错了什么?我也有其他使用范围的测试,但它们并没有失败(虽然没有在其中调用$scope.$apply),如何解决这个问题?
【问题讨论】:
-
AngularJS 版本?
-
@tasseKATT 角度为 1.5.9
-
如果您在控制器中删除
$mdDialog和$state的注入,同样的错误? -
@tasseKATT 是的,它实际上一直存在,我尝试添加这些依赖项并查看它们是否是麻烦的微妙原因,但似乎不是。
-
将尝试重现。
标签: angularjs unit-testing angularjs-scope jasmine karma-runner