我有一个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,匹配我想要阅读的文件。
非常感谢任何帮助。
答案 0 :(得分:3)
1.您可以使用以下预处理器来渲染html
将以下内容添加到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