在新范围内定义的AngularJS Jasmine测试功能

时间:2018-07-26 14:27:15

标签: angularjs jasmine

我在控制器中有一个函数,在其中创建一个新的作用域并在该作用域上定义函数。

function exampleController($rootScope) {
    let vm = this;
    vm.openDialog = openDialog;

    function openDialog() {
        let scope = $rootScope.$new(true);
        scope.exampleFunction = () => {
            scope.value1 = 123;
            //doMoreThings
        };
        ngDialog.open({
            template: 'template/path',
            scope
        });
    }

这是一个非常基本的示例,只是为了说明我正在谈论的情况。

有什么方法可以测试示波器上定义的功能?我尝试在控制器上定义函数并设置范围函数,如下所示:

scope.exampleFunction = exampleFunction;

我猜这是我需要走的路,但是由于该函数需要访问作用域本身,所以这不太成功。这个问题是我不知道如何在html中将范围作为参数传递。

我只是问一下,因为我正在使用的功能已经变得很大,并且在未经测试的情况下大大减少了代码覆盖率。

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

我想出了一种解决方法,因此您可以在测试规范中访问作用域变量。 本质上,您监视新作用域的创建,并返回自己可以访问的对象。像这样:

describe('openDialog', () => {
    it('should carry out exampleFunction', () => {
        let scope = {};
        spyOn($rootScope, '$new').and.returnValue(scope);
        controller.openDialog();
        scope.exampleFunction();
        //expect some condition resulting from exampleFunction
    });
});