在Karma + Jasmine测试中读取HTML文件

时间:2015-02-09 13:11:52

标签: javascript angularjs karma-jasmine

我有一个Angular控制器,它定义了一个包含50多个字段名称的数组。其中每个都应出现在HTML文件中,因为输入的id和ng模型都存在。我想通过阅读和解析HTML文件测试我是否没有输入拼写错误。因为我需要获得数组,所以Karma + Jasmine测试似乎是理想的(使用量角器我无法得到它)。测试这个的好方法是什么?

FileReader$http.get都不输入成功或错误功能,而XMLHttpRequest我只是输入一个空字符串。

我已经添加了一行

pattern: 'app/views/*.html', watched: false, included: false, served: true}

到karma.conf.js,匹配我想要阅读的文件。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

1.您可以使用以下预处理器来渲染html

  • npm install karma-ng-html2js-preprocessor --save-dev

将以下内容添加到karma.config.js:

ngHtml2JsPreprocessor : {
      moduleName:'templates'
},

2.使用angular的$ compile服务并创建要测试的html并将其添加到dom。然后你可以对那个html进行任何测试

var $body=$('$body');
afterEach(
    $body.empty();
);

答案 1 :(得分:1)

您可以使用jasmine-jquery将HTML代码段加载为灯具。不要为这个名字感到好奇,因为这个库还增加了很多custom jasmine matchers,它们与jQuery结合使用。

要使用它,请将您的karma配置文件中的以下内容添加到files数组:

// this is the path to your library if installed via bower
'../bower_components/jasmine-jquery/lib/jasmine-jquery.js', 

// make the views available to the locally by karma started webserver 
{pattern: 'views/*.html', watched: true, served: true, included: false},

对于测试,您必须定义视图的路径并明确加载它们:

beforeEach(function () {
    jasmine.getFixtures().fixturesPath = "base/views";  // path to your templates
    jasmine.getFixtures().load('myHtmlSnippet.html');   // load a template
});

这会将标识为div的{​​{1}}直接加载到运行测试的浏览器的jasmine-fixtures中。加载的灯具将插入body。然后你可以使用jQuery或vanilla javascript简单地访问它们。

答案 2 :(得分:0)

在我遇到这样的示例问题后,调用"服务器" -data并且不使用模型服务。 我偶然发现了这个条目: E2E mock $httpBackend doesn't actually passThrough for me

工作正常,您可以使用$ http.get并检查您的数据。

如果你正在使用promises,请尝试:https://github.com/ThomasBurleson/jasmine-as-promised