Javascript angularjs测试指令修改用户输入

Javascript angularjs测试指令修改用户输入,javascript,angularjs,testing,directive,Javascript,Angularjs,Testing,Directive,我的指令如下所示(从输入中删除非数字): 我的测试如下所示: 'use strict'; describe('Directive: percent', function () { var $compile; var $rootScope; beforeEach(module('fooApp')); beforeEach(inject(function(_$compile_, _$rootScope_){ $rootScope = _$rootScope_;

我的指令如下所示(从输入中删除非数字):

我的测试如下所示:

'use strict';

describe('Directive: percent', function () {

    var $compile;
    var $rootScope;

  beforeEach(module('fooApp'));

  beforeEach(inject(function(_$compile_, _$rootScope_){
    $rootScope = _$rootScope_;
    $compile = _$compile_;
  }));

  it('Removes non-digits', function () {
    $compile('<input percent ng-model="someModel.Property" value="1a2b3"></input>')($rootScope);
    $rootScope.$digest();
    console.log($rootScope.someModel);
    expect($rootScope.someModel.Property).toEqual('123');
  });
});
所以听起来好像
someModel
未设置=>测试失败

我不确定我的指令有什么问题。如果我手动测试:在HTML页面中输入非数字,这些数字不会显示(被忽略)

什么才是正确的测试方法


我怀疑,一旦数据不是来自用户,而是通过值设置的,我的指令就不会修改内容。但是不确定如何更改。

您应该做的是使用modelController
$setViewValue(value)
来触发解析器管道。要获得modelcontroller,您必须将虚拟html包装成
格式

  $compile('<form name="form1"><input percent ng-model="someModel.Property" name='data'></input></form>')($rootScope);
  $rootScope.form1.data.$setViewValue('1a2b3')
  $rootScope.$digest();
  console.log($rootScope.someModel);
  expect($rootScope.someModel.Property).toEqual('123');
$compile(“”)($rootScope);
$rootScope.form1.data.$setViewValue('1a2b3')
$rootScope.$digest();
log($rootScope.someModel);
expect($rootScope.someModel.Property).toEqual('123');
你能试试吗

LOG: undefined
  $compile('<form name="form1"><input percent ng-model="someModel.Property" name='data'></input></form>')($rootScope);
  $rootScope.form1.data.$setViewValue('1a2b3')
  $rootScope.$digest();
  console.log($rootScope.someModel);
  expect($rootScope.someModel.Property).toEqual('123');