如何使用AngularJs和/或Sinon存根DOM对象

如何使用AngularJs和/或Sinon存根DOM对象,angularjs,unit-testing,sinon,Angularjs,Unit Testing,Sinon,我试图测试一个角度控制器,该控制器在DOM中查询选择框值 $scope.getValue = function(){ document.getElementById('select_box_value').value; } 我如何存根这个函数,使它在控制器测试中返回一个简单的整数值,就像这样?每次我这样尝试时,都会运行原始函数而不是存根 describe('MyCtrl', function () { beforeEach(inject(function ($rootScope,

我试图测试一个角度控制器,该控制器在DOM中查询选择框值

$scope.getValue = function(){
   document.getElementById('select_box_value').value;
}
我如何存根这个函数,使它在控制器测试中返回一个简单的整数值,就像这样?每次我这样尝试时,都会运行原始函数而不是存根

describe('MyCtrl', function () {
    beforeEach(inject(function ($rootScope, $controller) {
        scope = $rootScope.$new();
        controller = $controller('MyCtrl', {
            '$scope': scope,
            '$scope.getValue':sinon.stub().returns(20)
        });
    }));
    it('gets the select box value', function () {
        expect(scope.getValue).toBe(20);
    });

});

角度控制器不应该直接与DOM交互,只有指令应该访问或修改DOM并在视图中使用。但是不确定测试问题。类似于
document.getElementById('select_-box_-value').value
绝对不应在Angular中使用。您只需(在很多情况下)将
ng model
添加到html元素中,然后在$scope中访问该模型。在这种情况下,您可能正试图针对不存在的东西进行测试(因此您永远不应该直接与控制器中的DOM交互)