Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing AngularJs:在单元测试指令时触发事件以模拟用户操作_Unit Testing_Angularjs_Angularjs Directive - Fatal编程技术网

Unit testing AngularJs:在单元测试指令时触发事件以模拟用户操作

Unit testing AngularJs:在单元测试指令时触发事件以模拟用户操作,unit-testing,angularjs,angularjs-directive,Unit Testing,Angularjs,Angularjs Directive,我已经看到,为了模拟由指令生成的DOM上的用户操作,有两种方法,都触发事件: 第一种方法使用jquery,第二种方法使用angular scenario.js中定义的名为browserTrigger的函数。第二个应该更好,因为jquery在事件触发方面会有一个bug(我相信,我不是在争论:) 使用角度场景对我来说意味着e2e测试。但我看到了,他似乎在做单元测试。这怎么可能 我猜他只是复制了这个函数 我想我将测试指令作为e2e测试,它更有意义,因为单元测试更接近纯函数 我刚刚发现browser

我已经看到,为了模拟由指令生成的DOM上的用户操作,有两种方法,都触发事件:

第一种方法使用jquery,第二种方法使用angular scenario.js中定义的名为browserTrigger的函数。第二个应该更好,因为jquery在事件触发方面会有一个bug(我相信,我不是在争论:)

使用角度场景对我来说意味着e2e测试。但我看到了,他似乎在做单元测试。这怎么可能

我猜他只是复制了这个函数

我想我将测试指令作为e2e测试,它更有意义,因为单元测试更接近纯函数


我刚刚发现browserTrigger是一种内部的东西,不应该直接使用:



谢谢

从1.3.15开始,您可以使用triggerHandler触发事件,如下所示

it('should click the element',function(){
    element.triggerHandler('click') ;
    expect($scope.clicked).toBe(true);
});

简单且有效,例如,在单元测试环境中:

spyOn(self, 'updateTransactionPrice');


var el = compile('<form name="form" latest novalidate json-schema="main.schema_discount" json-schema-model="main._data"><input type="text" ng-model="main._data.reverse_discount" ng-class="{ \'form-invalid\': form.reverse_discount.$invalid }" ng-change="main.transactionPrice(form);" name="reverse_discount" class="form-control-basic" placeholder="" ng-disabled="!main.selectedProduct.total_price"></form>')(scope);
el.find('input').triggerHandler('change');

expect(self.updateTransactionPrice).toHaveBeenCalled();
spyOn(self,'updateTransactionPrice');
var el=编译(“”)(范围);
el.find('input').triggerHandler('change');
expect(self.updateTransactionPrice).tohaveBeenCall();

我以前尝试过使用
ngScenario
来测试指令,发现使用指令比手动触发事件更困难。也许我还不够努力。无论如何,我已经用jQuery进行了测试。你可以去看看。希望它们对您有用。对于较旧的版本,在同一页中还显示了可能的副本。是否可以模拟$scope.function()调用?我的意思是类似于
?由于某种原因,我完全无法测试这种行为。。。