我们正在编写一个基于 Backbone.js 的应用程序,并尝试将我们的 Mocha 测试与我们的 Jenkins 持续集成服务器一起使用。
到目前为止,我可以使用Testem或mocha-phantomjs 之类的东西运行测试。测试运行,但它们从不触发退出代码,因此脚本永远不会返回到命令行提示符。这正是脚本应该做的,所以我猜测我们设置 Mocha 测试库的方式有问题。我自己没有发现问题。
有没有其他人遇到过这个问题,至少找到了解决方法。
有任何想法吗?
我们的 test.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Dashboard Mocha Tests</title>
<link rel="stylesheet" href="css/mocha.css" />
<script src="js/vendor/require.js" type="text/javascript"></script>
<script>
requirejs.config({
baseUrl: 'js/',
paths: {
jquery : 'vendor/jquery.min',
underscore : 'vendor/underscore',
backbone : 'vendor/backbone',
handlebars : 'vendor/handlebars',
text : 'vendor/require-text',
json : 'vendor/require-json',
chaplin : 'vendor/chaplin',
mocha : 'vendor/mocha',
chai : 'vendor/chai',
sinon : 'vendor/sinon',
moment : 'vendor/moment'
},
shim: {
backbone: {
deps : ['underscore', 'jquery'],
exports : 'Backbone'
},
underscore: {
exports : '_'
}
}
});
if (location.hash === '#testem')
document.write('<script src="/testem.js"></'+'script>')
</script>
</head>
<body>
<div id="mocha"></div>
<script type="text/javascript">
require(['require', 'vendor/chai', 'vendor/mocha', 'vendor/sinon'], function(require, chai) {
assert = chai.assert;
expect = chai.expect;
should = chai.should();
mocha.setup({
ui: 'bdd',
});
var specs = [
'test/lib/utils',
'test/models/campaigns',
'test/models/campaign',
'test/views/input/input',
'test/views/input/text',
'test/views/input/textarea',
'test/views/input/checkbox',
'test/views/input/email',
'test/views/input/password',
'test/views/input/button',
'test/views/input/submit_button',
'test/views/input/reset_button',
'test/views/input/number',
'test/views/input/date_time',
'test/views/input/date'
];
require(specs, function() {
mocha.run()
})
})
</script>
</body>
</html>
这是我们的一个测试外观的示例。
(function() {
define(['views/forms/textarea'], function(Textarea) {
'use strict';
return describe('Textarea', function() {
var field;
field = new Textarea;
describe('defaults', function() {
it('is enabled by default', function() {
return assert.isTrue(field.isEnabled());
});
return it('contains one textarea field', function() {
return assert.lengthOf($(field.el).find('textarea'), 1);
});
});
return describe('value', function() {
return it('can have set and get a value', function() {
field.setValue('my super value');
return assert.equal('my super value', field.getValue());
});
});
});
});
}).call(this);
任何帮助将非常感激。提前致谢。