Javascript 模拟web浏览器方向更改事件以使用jasmine测试绑定事件处理程序函数

Javascript 模拟web浏览器方向更改事件以使用jasmine测试绑定事件处理程序函数,javascript,unit-testing,angularjs-directive,jasmine,orientation-changes,Javascript,Unit Testing,Angularjs Directive,Jasmine,Orientation Changes,我有一个angularjs指令,用于为方向更改事件创建一个事件处理程序,以便在方向更改为横向时添加一个类名(它仍然需要改进,所以现在请耐心等待): angular.module('myApp') .directive('orientationHandler',function($rootScope,$timeout,$window){ 返回函数(范围、元素、属性){ var className=‘移动_景观’; var mediaQuery='仅屏幕和(最大宽度:768px)和(方向:横向)';

我有一个angularjs指令,用于为方向更改事件创建一个事件处理程序,以便在方向更改为横向时添加一个类名(它仍然需要改进,所以现在请耐心等待):

angular.module('myApp')
.directive('orientationHandler',function($rootScope,$timeout,$window){
返回函数(范围、元素、属性){
var className=‘移动_景观’;
var mediaQuery='仅屏幕和(最大宽度:768px)和(方向:横向)';
var-orientationCheck=函数(){
if($window.matchMedia(mediaQuery.matches){
元素addClass(类名);
$rootScope.$broadcast('Orientation.change','scanner');
}否则{
element.removeClass(className);
$rootScope.$broadcast('Orientation.change','crative');
}
};
$window.addEventListener('orientationchange',function(){
$timeout(方向检查,100);
$timeout(方向检查,200);
},
假的
);
$rootScope.$on(“$viewContentLoaded”,函数(){
$timeout(方向检查,100);
$timeout(方向检查,200);
});
};
});
现在我想在jasmine上测试这样一个指令:

//TODO:找到一种测试方向更改事件的方法
描述('Directive:orientationHandler',函数(){
//加载指令的模块
在每个模块之前(模块(‘myApp’);
var元素,
范围
$window;
beforeach(注入(函数($rootScope、$compile、$httpBackend、$window){
$window=\$window;
scope=$rootScope.$new();
元素=角度。元素(“”);
元素=$compile(元素)(范围);
$httpBackend.whenGET(/.*/).respond(200);
}));
它('改变方向时应广播事件',函数(){
var消息;
作用域:$on('Orientation.change',函数(事件,值){
消息=值;
});
angular.element($window.trigger('orientationchange');
作用域:$apply();
expect(message.toBeDefined();
expect(angular.isString(message)).toBe(true);
});
});
那么,有没有一种方法可以通过编程触发方向更改事件,或者以某种方式模拟它来测试绑定的事件处理程序

谢谢

两点:

  • 我将使用以下内容检查方向类型:

    $window.screen.orientation.type
    
    不需要运行媒体查询

  • 我在测试中使用以下方法触发事件:

    function dispatchOrientationChangeEvent() {
      var evt, orientationEventType = 'orientationchange';
      evt = $window.document.createEvent('HTMLEvents');
      evt.initEvent(orientationEventType, true, true);
      $window.dispatchEvent(evt);
    }