我正在使用带有RequireJS的Mocha并且测试运行正常,但是,当我尝试添加一揽子代码覆盖时,我得到Uncaught TypeError: Object #<HTMLDivElement> has no method 'reporter'
,
这是我正在运行的代码:
<div id="mocha"></div>
<script src="../src/js/vendor/requirejs/require.js"></script>
<script src="../src/js/vendor/blanket/dist/qunit/blanket.js"
data-cover-adapter="../src/js/vendor/blanket/src/adapters/mocha-blanket.js"></script>
<script src="SpecRunner.js" data-cover></script>
和我的specrunner:
require(["../src/js/require-config.js"], function () {
// Set testing config
require.config({
baseUrl: "../src/js",
paths: {
"mocha": "vendor/mocha/mocha",
"chai": "vendor/chai/chai"
},
urlArgs: "bust=" + (new Date()).getTime()
});
require([
"require",
"chai",
"mocha"
], function (require, chai) {
var should = chai.should();
mocha.setup("bdd");
require([
"specs.js",
], function(require) {
if (window.mochaPhantomJS) {
mochaPhantomJS.run();
} else {
mocha.run();
}
});
});
});
就像我说的那样 - 我的测试都运行良好,我只是无法弄清楚为什么毯子不起作用。
更新
我可以通过在开始时包含mocha的脚本标记来运行它,但是,现在它运行mocha测试两次。
答案 0 :(得分:0)
您使用RequireJS的方式存在问题。如果您使用RequireJS加载代码并使用<script>
标记加载代码,并且:
这两组代码并不相互依赖,您可以按任何顺序加载它们。
加载<script>
的代码取决于RequireJS加载的代码,然后您应该将加载了<script>
的代码转换为要加载的RequireJS。如果不这样做,则会遇到间歇性故障。
使用RequireJS加载的代码取决于加载<script>
的代码,然后加载<script>
的代码必须在开始使用RequireJS加载代码之前加载并执行。
从查看Blanket的文档,我确定你的案例是第二个。在开始使用RequireJS加载模块之前加载Blanket适配器,但是适配器希望Mocha存在已经。
您必须使用shim。我无法确定您使用的确切垫片(因为我不使用毯子),但这样的事情可以帮助您朝着正确的方向前进:
shim: {
"blanket": {
exports: "blanket"
},
"mocha-blanket": ["mocha", "blanket"]
}
显然,"blanket"
和"mocha-blanket"
名称必须根据您的情况进行调整。我认为适配器本身不需要exports
值,因为适配器将自身附加到Mocha而不是在全局空间中导出。
答案 1 :(得分:0)
我弄清楚了并且写了一篇关于让Blanket与AMD的Mocha合作的报道。 Here's a blog post概述了该过程以及repo with the working code。
我正在使用以下内容加载我的测试:
require(["../src/js/require-config"], function () {
require.config({
baseUrl: "../src/js",
paths: {
chai: "vendor/chai/chai"
}
});
require([
"chai"
], function (chai) {
chai.should();
window.expect = chai.expect;
mocha.setup("bdd");
require([
"specs.js"
], function () {
mocha.run();
});
});
});
然后是页面上的以下代码:
<div id="mocha"></div>
<script src="../src/js/vendor/mocha/mocha.js"></script>
<script data-main="main-tests" src="../src/js/vendor/requirejs/require.js"></script>
<script src="../src/js/vendor/blanket/dist/qunit/blanket.js" data-cover-only="../src/js/component"></script>
<script type="text/javascript" src="../node_modules/grunt-blanket-mocha/support/mocha-blanket.js"></script>
<script>
/* global blanket */
if (window.PHANTOMJS) {
blanket.options("reporter", "../node_modules/grunt-blanket-mocha/support/grunt-reporter.js");
}
</script>
答案 2 :(得分:0)
毯子上发布的摩卡适配器不起作用。
使用bower bower install blanket#master --save-dev
此外,脚本包含事项的顺序
<script src="mocha.js"></script>
<script>mocha.setup('bdd');</script>
<script data-main="config.js" src="../bower_components/requirejs/require.js"></script>
<script src="../bower_components/blanket/dist/qunit/blanket.js" data-cover-never="bower_components"></script>
<script src="../bower_components/blanket/src/adapters/mocha-blanket.js"></script>