使用jsdom测试angular js指令:$ scope.digest()不调用

时间:2016-03-03 16:53:10

标签: angularjs unit-testing jsdom

我们正在用jsdom和角度模拟测试角度js。我有一个设置文件,它按顺序需要jsdom,angular和angular mocks。足够简单,可以使用控制器和服务设置测试。我遇到了templateUrl的问题。我知道Karma你必须设置一个配置。我遇到了一个github要点,这些工具一起使用https://gist.github.com/rikukissa/dcb422eb3b464cc184ae

我想知道如何访问templateUrl?

由于jsdom与节点一起运行,所以我需要文件系统并调用readFileSync     var fs = require('fs');     template = $ sce.trustAsHtml(fs.readFileSync('pathToTemplates,'utf8'));

**注意需要$ sce才能让我读取文件。我知道代码使用的是1.5版,它应该实例化,但我没有编译就不能编译。

这是我目前使用jasmine和jsdom的测试

describe('hero Directive', function () {
  var $compile,
    $rootScope,
    scope,
    element,
    template,
    haConfig,
    $sce
    ctrl;

beforeEach(function () {
    angular.mock.module('ha.module.core');

    angular.mock.inject(function (_$compile_, _$rootScope_, _$controller_, $httpBackend, $templateCache) {
        $compile = _$compile_;
        $rootScope = _$rootScope_;
        scope = $rootScope.$new();
        haConfig = _haConfig_;

        $templateCache.put("haConfig.getTemplateUrl('explore-hero-base-template.html')", template);
        var html = angular.element("<div explore-hero></div>");
        element = $compile(html)($scope)

html返回值

      {'0': HTMLDIVElement {239:2}, length: 1}

我理解长度属性,但 239:2让我感到困惑。

最后阻止我进一步调试和修复此测试的问题是$ scope.digest()没有被调用

   beforeEach(function()

后停止

 element = $compile(html)($scope)

忽略摘要并直接进入规范。

        $scope.$digest();
        console.log('called not being reached');
    });

});

afterEach(function () {
    // need to remove the element element.remove();
});

describe('directive controller', function () {
    it('should dispatch call $emit with $methodsBound', function () {
        spyOn(scope, '$emit');

        //expect(scope.$emit).toHaveBeenCalledWith('$methodsBound');
    });
});

});

0 个答案:

没有答案