Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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
Javascript 单元测试角度指令替换为textarea_Javascript_Angularjs_Unit Testing_Jasmine - Fatal编程技术网

Javascript 单元测试角度指令替换为textarea

Javascript 单元测试角度指令替换为textarea,javascript,angularjs,unit-testing,jasmine,Javascript,Angularjs,Unit Testing,Jasmine,嗨,我有这个指令定义,它被一个textarea代替。它看起来像这样: angular.module('xyz') .directive('dir1', [function() { return { scope : {}, replace : true, template : "<textarea></textarea>", require : "ngModel", link : fun

嗨,我有这个指令定义,它被一个textarea代替。它看起来像这样:

angular.module('xyz')
.directive('dir1', [function()
{
    return {
        scope : {},
        replace : true,
        template : "<textarea></textarea>",
        require : "ngModel",
        link : function(scope, element, attrs, ctrl)
        {
            ctrl.$parsers.push(function(value)
            {
                //..do some stuff
                return value;
            });
        }
    }
}]);
describe('Specs for dir1', function()
{
    var scope, dir_1;
    beforeEach(module('xyz'));
    beforeEach(inject(function($compile, $rootScope)
    {
         scope = $rootScope.$new();
         scope.test_data = "";
         dir_1 = $compile("<dir1 ng-model='test_data'></dir1>")(scope);
    }));

    it('Does some stuff in $parsers when view value changes', function()
    {
        //I want to do something like this:
        //<textarea>.setViewValue("some value") which will
        //call one of the functions injected in $parsers.
    });
});
顺便说一句,您可以放心,$parsers中插入的函数确实会在我在浏览器中尝试时被调用,即在文本区域中键入内容时,在呈现的html上被调用。

因为您正在对代码进行单元测试,所以您希望尝试将不同的部分分离成易于测试的单元。您提到,
//…做一些事情
相当复杂。对我来说,这是一个需要重构成服务的问题,因为你可以控制输入和输出,所以服务本身可以很容易地进行测试

如果
//…dosomething
与DOM交互,并且做了很多有副作用的古怪事情,那么这就是一种糟糕的代码味道,似乎应该对其进行重构以减少副作用


一旦你有了
//…做了一些事情
正确地提取并进行了单元测试,你在控制器中测试所需要的就是正确地添加了
$parser
,这是一个简单得多的测试。

我实际上是这样想的,但有点懒得提取出来。谢谢你的建议。我现在真的要试一试。顺便说一句,这是一个快速跟进的问题。如何在单元测试中获取$parsers列表以查看是否添加了该函数?我正在考虑将ctrl添加到独立的访问范围中。请看$controller服务。