mercredi 6 avril 2016

Issue with Backbone view Mocha unit test using jsdom and Requirejs

I have an issue when trying to run mocha unit tests with Backbone, jsdom and Require.js.

There is two simple views ViewA and ViewB (similar here), having their test files ViewATest.js and ViewBTest.js

Running mocha ViewATest.js or mocha ViewBTest.js passes fine, but running both (mocha ViewATest.js ViewBTest.js) fails

RequireJSConf.js

var requirejs = require('requirejs');
requirejs.config({
  baseUrl: 'public/javascripts',
  paths: {
    'backbone': 'lib/backbone/backbone',
    'underscore': 'lib/lodash/index'
  }
});
module.exports = requirejs;

ViewA.js and ViewB.js

define(['backbone'], function(Backbone) {
  'use strict';

  return Backbone.View.extend({

    initialize: function() {
      this.render();
    },

    render: function() {
      this.$('name').val('test');
      return this;
    }
  });
});

ViewATest.js (ViewBTest.js is similar with B replacing A)

'use strict';
var expect = require('chai').expect;
var requirejs = require("../requireJsConf");
var jsdom = require("jsdom");

describe('ViewATest', function() {
  var ViewA, sut;

  var template = '\
      <input name="name" />\
      <input name="description" />'
    ;

  before(function(done){
    jsdom.env('<html><body><form id="ViewA">' + template + '</form></body></html>',function(err, window) {
        global.window = window;

        requirejs(['app/view/ViewA'], function(viewA) {
          ViewA = viewA;
          sut = new ViewA({
            el: "#ViewA"
          });
          sut.$el.html(template);
          done();
        });
      });
  });

  it('loads the element', function() {
    expect(sut.$el.html()).not.to.be.empty;
  });
});

We are using backbone 1.3.2, jsdom 8.3.0, mocha 2.4.5, requirejs 2.2.0

Aucun commentaire:

Enregistrer un commentaire