当前位置: 首页 > 面试题库 >

测试角度指令时,即使使用ng-html2js时,也会出现Karma'意外的请求'

龙玺
2023-03-14
问题内容

在花了最后一天使这项工作完成之后,我发现我回过头来遇到开始时遇到的相同错误:

错误:意外请求:GET test-directive.html

我正在使用Karma和Jasmine在Angular中测试指令。我在StackOverflow上浏览了类似的问题,但发现在其他示例中尝试过的所有方法均无济于事。

代码结构

Test-App
-src
--bower
--lib
--js
--modules
-– testDir
-— test.js
-— test-directive.html
-— test
----- test.spec .js文件
-test
--config
-– karma.conf.js
--e2e

业力配置

'use strict';
module.exports = function(config){
    config.set({
    basePath: '../../',
    frameworks: ['jasmine'],
    files: [
        // Angular
        'src/bower/angular/angular.js',
        // Mocks
        'src/bower/angular-mocks/angular-mocks.js',
        // Libraries
        'src/lib/**/*.js',
        // App
        'src/js/*.js',
        'src/modules/*/*.js',
        // Tests
        'src/modules/**/test/*spec.js',
        // Templates
        'src/modules/**/*.html'
    ],
    autoWatch: false,
    singleRun: true,
    reporters: ['progress'],
    browsers: ['PhantomJS'],

    preprocessors: {
        'src/modules/**/*.html': 'ng-html2js'
    },
    ngHtml2JsPreprocessor: {
        moduleName: 'dir-templates'
    },
    plugins: [
        'karma-jasmine',
        'karma-ng-html2js-preprocessor',
        'karma-phantomjs-launcher',
        'karma-chrome-launcher',
        'karma-junit-reporter'
    ]
    });
};

test.js

'use strict';
angular.module('modules.test', []).
directive('testDirective', [function() {
    return {
        restrict: 'E',
        templateUrl: 'test-directive.html',
        link: function($scope, $elem, $attrs) {
            $scope.someFn = function() {
                angular.noop();
            };
        }
    };
}]);

test-direct.html

<span>Hello World</span>

test.spec.js

'use strict';
describe('test module', function() {
    beforeEach(module('modules.test'));
    /* -- DIRECTIVES------------------ */
    describe('directives', function() {
        var $compile, $scope, elm;
        beforeEach(module('dir-templates');
        beforeEach(inject(function($compile, $rootScope) {
            $scope = $rootScope.$new();
            elm = angular.element('<test-directive></test-directive>');
            $compile(elm)($scope);
            $scope.$digest();
        }));
        it('should have one span tag', function(){
            //Jasmine test here to check for one span tag.
        });
    });
});

缩短了几个文件以解决问题所在。在调用beforeEach(module('dir-templates')),它应该将所有匹配的.html文件加载到$
templateCache中,并防止引发错误的GET请求。

任何帮助将不胜感激,因为它确实使我发疯。如果您还有其他疑问,请发表评论。


问题答案:

因此,似乎很难解决两行问题。在Chrome(而不是PhantomJS)中打开Karma并查看源文件后,我注意到当ng-html2js将指令附加到$
templateCache时,它将使用整个路径,而不是指令定义中提供的路径。

简而言之,'src/modules/test/test-directive.html.js' !== 'test-directive.html.js'

为此,请将karma.conf.js文件ngHtml2JsProcessor修改为:

ngHtml2JsPreprocessor: {
    stripPrefix: 'src/',
    moduleName: 'dir-templates'
},

指令声明的templateUrl如下所示:

templateUrl: 'modules/test/test-directive.html'


 类似资料:
  • 因此,我尝试使用coinbase API。我正在尝试一个简单的测试,看看我是否可以让它工作,但我得到了各种作曲家的错误。 目前,我得到意外的t'use'为这个代码: 那么,我的使用声明在错误的地方吗?我在索引函数和类之外尝试过它们。两者产生的结果与此完全不同。 在Keks班之外,我得到了 致命错误:在第15行的/home/content/61/11420661/html/beta/applicat

  • 问题内容: 我有一个带有Rails后端的单页Angular应用程序。我在文件中使用标签,但是当我使用Karma运行前端单元测试时,我得到了: 我在我的主要.js文件中执行此操作: 因此,有什么方法可以在业力实际呈现的页面中注入元素?否则,告诉Angular / Karma在运行单元测试时忽略此错误? 更新资料 这个Google Groups线程 和这个GitHub问题都描述了这个问题,但是在两种情

  • 问题内容: 我知道这个问题已经被问过很多次了,而且我知道在大多数情况下人们会丢失文件。 我遇到了同样的问题,试图在模块上测试工厂。不幸的是,我一直遇到测试方面的问题(为什么要使用Angular,为什么要假设和对象?),未定义模块的状态。我很茫然。我也尝试过使用angular.mocks.module,但随后收到一条消息,提示未定义Angular。我究竟做错了什么? 值得注意的是,我正在使用gulp

  • 我有一个项目,起初我能够使用命令,但由于我已经实现了命令,当我遇到以下错误时,该命令不再起作用 错误:多个模块匹配。使用跳过导入选项跳过将组件导入最近的模块。多个模块匹配。使用跳过导入选项跳过将组件导入最近的模块。 我不太确定是不是导致了这一点,但这似乎是我所能做的,我需要修复它

  • 我有一个简单的spring boot应用程序,它有一个POST rest api方法来注册用户。当我通过邮递员测试它时,这工作得很完美。但当我从我的移动应用程序中测试它时,这总是抛出一个403。这在选项级别失败,因为我没有看到我的后端记录一个尝试的请求。 对于这个问题,通常的解决方案是在spring安全配置中禁用。有趣的是,我这个残疾人还得403分。我已经尽我所能地寻找了很多,但还是找不到一个解决

  • 我正在使用spring boot开发REST应用程序,并试图优化查询的性能。我目前正在使用存储库中的,这会导致性能问题。代码如下: 个人实体 密码实体 角色实体 人员存储库 当我做一个时,在人表中的每一行都会触发选择查询,以获取密码和角色。我知道我可以在存储库中使用注释和来强制生成单个查询,但是我想知道是否有其他方法可以这样做。我正在寻找我们可以在实体级别上做的事情来减少查询。 使用Spring