我正在创建一个 JS 小部件,第一部分是使用 javascript 添加脚本,如下所示(来自谷歌分析的示例):
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
如何用 jasmine 进行测试(使用夹具)?
为了在我的规范中设置 HTML 固定装置,我编写了 jasmine-fixture。有了它,你可以做这样的事情:
var $foo, $input;
beforeEach(function(){
$foo = affix('.foo');
# appends to the DOM <div class="foo"></div>
$input = $foo.affix('input[id="name"][value="Jim"]');
# appends <input id="name" value="Jim"/> beneath the .foo div
AfterEach,它会在你之后清理。
对于 DOM 状态的期望,我使用 jasmine-jquery。它提供了大量的匹配器,如下所示:
it('is named Jim', function(){
expect($input).toHaveValue("Jim");
});
我想您可以执行您的操作,然后检查第一个脚本标记上的 href,如下所示:
function addGA(){
var ga = document.createElement('script');
ga.type = 'text/javascript'; ga.async = true;
ga.src =
('https:' == document.location.protocol ? 'https://ssl' : 'http://www')
+ '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
};
茉莉花规格:
var href = 'http://www.google-analytics.com/ga.js';
expect(document.getElementsByTagName('script')[0].href).not.toEqual(href);
addGa();
expect(document.getElementsByTagName('script')[0].href).toEqual(href);
不过,我有兴趣听到更好的方法。用 Jasmine 检查 DOM 总是感觉有点 hacky。
对于使用 Jasmine 进行大量 DOM 测试,您可以使用 Jasmine Headless WebKit(Web 存档 2013/01)。
https://github.com/johnbintz/jasmine-headless-webkit
这个项目已经死了。你应该使用 Karma 来代替。我愿意。
(所有者存档于2020年6月16日)