Busterjs + requirejs + spine, how to write tests?

I had a little problem with the combination of busterjs + requirejs + backbone, the structure of my project:

Js-src

- lib // jquery, require, etc.

- view

- models

-app.js // configuration and application start required

js (the same structure compiled as above)

Test

-buster.js

-require-config.js

-TEST-test.js

required-config.js:

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'] } } }); 

typical file, except in 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); }); }); }); 

When I run it using the buster test, I get:

 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: 

How to write the right test with this structure?

+4
source share
2 answers

This will help if you run browser tests and check the outputs in the console. Error messages in them are usually much more expressive. You must also remove the autoRun directive from the buster configuration and enable the "buster-amd" extension again.

0
source

I am new to Buster.js as of yesterday, but I will add the following 4-part sentence.

1.) Uncomment "extensions: [require ('buster-amd')]" in your 'buster.js'

2.) Remove 'baseUrl' from your 'require.config'

3.) Explicitly set the paths to your libraries. For example, "jplugins:" lib / jquery.plugins "will become" jplugins: "js-src / lib / jquery.plugins", this will also be needed for models, collections, views and other files, js-src / '.

 require.config({ paths: { jquery: 'js-src/lib/jquery', views: 'js-src/lib/views', somerootfile: 'js-src/somerootfile' 

4.) Change your test this way ...

 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'); }); }); }); }); 

The problem is that "baseUrl" in "require.config" confuses Buster.js and does not require much respect for the "rootPath" set in "buster.js".

0
source

Source: https://habr.com/ru/post/1439813/


All Articles