Angular karma测试指令错误:意外请求:GET

时间:2015-01-14 13:12:29

标签: angularjs unit-testing angularjs-directive karma-runner karma-jasmine

我正在为karma设置角度指令的单元测试,并且我很难配置ngHtml2JsPreprocessor预处理器。我已经尝试了一些不同的方法,如Stack Owerflow中设置测试的各种线程中描述的那样,但我正在寻找一种适合我的方法。

karma.conf.js

    files: [
        'bower_components/angular/angular.js',
        ..
        ..
        ..
        'test/mock/*.js',
        'test/mock/**/*.js',
        'test/spec/unit/**/*.js',
        'app/views/*.html',
        'app/views/**/*.html'
        //'app/views/**/**/*.html'
    ],

    preprocessors: {
        //'app/views/**/**/*.html': ['ng-html2js']
        'app/views/**/*.html': ['ng-html2js']
    },

    ngHtml2JsPreprocessor: {
        // strip this from the file path
        stripPrefix: 'app/',
        moduleName: 'PreprocessedTemplates'
    },

测试文件

beforeEach(inject(function ($compile, $rootScope, $templateCache, $httpBackend) {
        scope = $rootScope;
        //$templateCache.put('/app/views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html', $templateCache.get('/app/views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html'));
        //$templateCache.put('../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html', $templateCache.get('../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html'));

        ele = angular.element(
            '<konstrukt-std-filterbox title="Testing generic filter Component" items="list" source="data" filter-entity="Dim1"></konstrukt-std-filterbox>'
        );

        mockupDataFactory = konstruktMockupData.getInstance();

        //these variables are needed.
        scope.data = mockupDataFactory.pivotedData;
        scope.list = ["first","second"];

        scope.$apply();

    }));

它在每个消息之前都失败了。

  

错误:意外请求:GET ../../../ views / components / KonstruktStdFilterbox / KonstruktStdFilterbox.html

模板的路径是

  

应用\视图\部件\ KonstruktStdFilterbox \ KonstruktStdFilterbox.html

我理解测试无法在templatecache中找到模板,但是如何配置karma以使PreprocessedTemplates加载我的模板? 我在karma.conf.js中尝试了不同的配置,请参阅上面注释掉的行。

1 个答案:

答案 0 :(得分:2)

事实证明我在我的指令中定义了很难找到的路径,因此错误

  

错误:意外请求:GET   ../../../视图/组件/ KonstruktStdFilterbox / KonstruktStdFilterbox.html

angular.module('app').directive('directive', function(utilities) {
    return {
        restrict: 'E', //element
        templateUrl: '../../../views/components/KonstruktStdFilterbox/KonstruktStdFilterbox.html',
        scope:  true,
        replace: true,

...

当我将 templateUrl 更改为此时,测试运行正常!

  

templateUrl:   &#39;视图/组件/ KonstruktStdFilterbox / KonstruktStdFilterbox.html