Backbone.js Busterjs+;requirejs+;如何编写测试?
我对busterjs+requirejs+主干网的组合没有什么问题,我的项目结构: js src --lib//jquery、require等 --观点 --模型 -app.js//需要配置和启动应用程序 js(编译结构与上面相同) 试验 -buster.js -require-config.js -test-test.js require-config.js:Backbone.js Busterjs+;requirejs+;如何编写测试?,backbone.js,requirejs,Backbone.js,Requirejs,我对busterjs+requirejs+主干网的组合没有什么问题,我的项目结构: js src --lib//jquery、require等 --观点 --模型 -app.js//需要配置和启动应用程序 js(编译结构与上面相同) 试验 -buster.js -require-config.js -test-test.js require-config.js: require.config({ baseUrl: 'js-src/', paths: { jquery: 'lib/
require.config({
baseUrl: 'js-src/',
paths: {
jquery: 'lib/jquery',
jplugins: 'lib/jquery.plugins',
underscore: 'lib/underscore',
backbone: 'lib/backbone'
},
shim: {
'backbone': {
deps: ['underscore', 'jplugins'],
exports: 'Backbone'
},
'jplugins': {
deps: ['jquery']
}
}
});
在lib中删除的典型文件:
define(function (require) {
var $ = require('jquery'),
Backbone = require('backbone'),
otherElem = require('views/other'),
View = Backbone.View.extend({
el: '#el',
initialize: function () {
},
showLinks: function (value) {
},
render: function ) {
}
});
return View;
});
buster.js:
var config = module.exports;
config['browser-all'] = {
autoRun: false,
environment: 'browser',
rootPath: '../',
libs: [
'js-src/lib/require.js',
'test/require-config.js'
],
sources: [
'js-src/**/*.js'
],
tests: [
'test/*-test.js'
]
// extensions: [
// require('buster-amd')
// ]
};
test-test.js:
buster.spec.expose();
require(['views/View'], function (module) {
describe("An AMD module", function () {
it("should work", function () {
expect(true).toEqual(true);
});
});
});
当我使用buster测试运行它时,我得到:
Uncaught exception: ./js-src/lib/require.js:192 Error: Script error
http://requirejs.org/docs/errors.html#scripterror
TypeError: uncaughtException listener threw error: Cannot read property 'id' of undefined
at Object.uncaughtException (/usr/local/lib/node_modules/buster/node_modules/buster-test-cli/lib/runners/browser/progress-reporter.js:49:50)
at notifyListener (/usr/local/lib/node_modules/buster/node_modules/buster-core/lib/buster-event-emitter.js:37:31)
at Object.emit (/usr/local/lib/node_modules/buster/node_modules/buster-core/lib/buster-event-emitter.js:101:17)
at Object.emitCustom (/usr/local/lib/node_modules/buster/node_modules/buster-test-cli/lib/runners/browser/remote-runner.js:283:14)
at /usr/local/lib/node_modules/buster/node_modules/buster-test-cli/lib/runners/browser/remote-runner.js:89:16
at /usr/local/lib/node_modules/buster/node_modules/buster-test-cli/node_modules/buster-capture-server/lib/pubsub-client.js:79:47
at Object.trigger (/usr/local/lib/node_modules/buster/node_modules/buster-test-cli/node_modules/buster-capture-server/node_modules/faye/node/faye-node.js:383:19)
at Object.distributeMessage (/usr/local/lib/node_modules/buster/node_modules/buster-test-cli/node_modules/buster-capture-server/node_modules/faye/node/faye-node.js:666:30)
at Object._deliverMessage (/usr/local/lib/node_modules/buster/node_modules/buster-test-cli/node_modules/buster-capture-server/node_modules/faye/node/faye-node.js:1065:20)
at Object.<anonymous> (/usr/local/lib/node_modules/buster/node_modules/buster-test-cli/node_modules/buster-capture-server/node_modules/faye/node/faye-node.js:1004:12)
Firefox 16.0, Linux:
Uncaught异常:./jssrc/lib/require.js:192错误:脚本错误
http://requirejs.org/docs/errors.html#scripterror
TypeError:uncaughtException侦听器引发错误:无法读取未定义的属性“id”
在Object.uncaughtException(/usr/local/lib/node_modules/buster/node_modules/buster test cli/lib/runners/browser/progress reporter.js:49:50)
在notifyListener(/usr/local/lib/node_modules/buster/node_modules/buster core/lib/buster event emitter.js:37:31)
在Object.emit(/usr/local/lib/node_modules/buster/node_modules/buster core/lib/buster event emitter.js:101:17)
在Object.emitCustom(/usr/local/lib/node_modules/buster/node_modules/buster test cli/lib/runners/browser/remote runner.js:283:14)
at/usr/local/lib/node_modules/buster/node_modules/buster test cli/lib/runners/browser/remote runner.js:89:16
在/usr/local/lib/node_modules/buster/node_modules/buster-test-cli/node_modules/buster-capture-server/lib/pubsub-client.js:79:47
在Object.trigger(/usr/local/lib/node_modules/buster/node_modules/buster test cli/node_modules/buster捕获服务器/node_modules/faye/node/faye node.js:383:19)
在Object.distributeMessage(/usr/local/lib/node_modules/buster/node_modules/buster test cli/node_modules/buster捕获服务器/node_modules/faye/node/faye node.js:666:30)
at Object._delivery消息(/usr/local/lib/node_modules/buster/node_modules/buster test cli/node_modules/buster捕获服务器/node_modules/faye/node/faye node.js:1065:20)
反对。(/usr/local/lib/node_modules/buster/node_modules/buster test cli/node_modules/buster捕获服务器/node_modules/faye/node/faye node.js:1004:12)
Firefox 16.0,Linux:
如何使用该结构编写适当的测试?如果您运行浏览器测试并在控制台中检查输出,将有所帮助。其中的错误消息通常更具表现力。您还应该从buster配置中删除autoRun指令,并重新启用“buster amd”扩展。从昨天开始,我是buster.js的新手,但我将添加以下4部分建议 1.)取消“buster.js”中的“extensions:[require('buster-amd')]”注释 2.)从“require.config”中删除“baseUrl” 3.)显式设置LIB的路径。例如,“jplugins:'lib/jquery.plugins'”将变成“jplugins:'js src/lib/jquery.plugins'”,这对于位于“js src/”目录上的模型、集合、视图和其他文件也是必需的
require.config({
paths: {
jquery: 'js-src/lib/jquery',
views: 'js-src/lib/views',
somerootfile: 'js-src/somerootfile'
4.)将您的测试更改为这样
describe('some test', function(run) {
require(['models/your_model'], function(YourModel) {
run(function() {
it('should load', function() {
var yourModel = new YourModel();
yourModel.set('cat', 'dog');
expect(YourModel.get('cat')).toEqual('dog');
});
});
});
});
问题似乎是'require.config'中的'baseUrl'混淆了Buster.js,并告诉它不再尊重'Buster.js'中设置的'rootPath'