我使用jasmine为控制器编写单元测试,我必须检查函数是否在 string answer;
while (true)
{
Console.WriteLine("Enter your favorite animal:");
answer = Console.ReadLine();
if (new Regex("^[A-Z][a-z]*$").IsMatch(answer))
{
Console.WriteLine("You like {0}s. Cool!", answer);
Console.ReadKey();
break;
}
else
{
Console.WriteLine("'{0}' is not a valid answer.", answer);
Console.WriteLine();
Console.WriteLine("Make sure:");
Console.WriteLine("You are entering a one word answer.");
Console.WriteLine("You are only using letters.");
Console.WriteLine("You are capitalizing the first letter of the word.");
Console.WriteLine();
Console.WriteLine("Try again:");
}
}
上运行。我使用$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'
),如何解决这个问题?
答案 0 :(得分:1)
我最近遇到了同样的问题。(仅限于'可能未处理的拒绝:被抛出') 这个问题是由angular-translate的设计引起的,我假设你在你的应用程序中使用它。 看看以下链接: How do unit test with angular-translate
有一些方法可以解决这个问题。 我使用了在自己的文件中提取translationProvider配置的那个,并且在业力中我排除了这个。
angular.module('qPro5App').config(loaderConfig);
loaderConfig.$inject = ['$translateProvider'];
function loaderConfig($translateProvider) {
// translation i18n support
$translateProvider.useStaticFilesLoader({
files: [{
prefix: 'assets/i18n/errors-',
suffix: '.json'
},
{
prefix: 'assets/i18n/ui-',
suffix: '.json'
}]
});
$translateProvider
.preferredLanguage('en')
.fallbackLanguage('en')
.useSanitizeValueStrategy('sanitize');
}
和业力:
exclude: ['app/config/app-i18n-loader.js'],
答案 1 :(得分:0)
我在稍有不同的情况下(处理承诺)遇到了相同的问题,并添加了
.catch(angular.noop)
解决了这个问题。