Доступ к «глобальным» функциям mocha.js при использовании require.js - PullRequest
9 голосов
/ 21 февраля 2012

Я включаю Mocha.js с превосходным использованием shim для сайта на базе Require.js.

Как получить доступ к BDD-функциям define () и it (), объявленным Mocha при использовании Require.js?

Вот базовый пример кода:

test.js:

var mocha    = require('use!mocha')
  , testFile = require('testFile.js')

mocha.setup('bdd');
mocha.run();

testFile.js:

define(function(require) {
  // describe() and it() are not available
  describe('Book', function() {
    it('should have pages', function() {

    });
  });
});

Я получаю ошибку Uncaught ReferenceError: describe is not defined при запуске в браузере.

Я пробовал window.describe и пытался переместить require ('testFile.js') в после mocha.setup ('bdd'). Я знаю, что что-то упустил. Вероятно, передача контекста в мокко как-то.

Ответы [ 2 ]

13 голосов
/ 21 декабря 2012

Проблема в том, что глобальные функции, такие как describe и it, настроены на mocha.setup().Вы можете использовать свойство init shim config для вызова mocha.setup() перед экспортом mocha.

requirejs.config({
  shim: {
    'mocha': {
      init: function () {
        this.mocha.setup('bdd');
        return this.mocha;
      }
    }
  }
});

require(['mocha', 'test/some_test'], function (mocha) {
  mocha.run();
});

Для тестовых файлов требуется mocha.

define(['mocha'], function (mocha) {    
  describe('Something', function () {
    // ...
  });
});

Свойство init config Shimбыл введен в RequireJS 2.1 .Вы можете использовать свойство exports вместо init с RequireJS 2.0 .

6 голосов
/ 24 февраля 2012

Я нашел решение в проектах тестирования amd проекта Геддски.

Вместо того, чтобы включать тестовые файлы вверху вместе с mocha, например:

define(['use!mocha', 'testFile'],
function(Mocha, TestFile) {
  mocha.setup('bdd');
  mocha.run();
});

Тестовые файлы должны быть включены как еще один вызов require, а mocha.run () встроен в обратный вызов:

define(['use!mocha'],
function(Mocha) {
  mocha.setup('bdd');

  // Include the test files here and call mocha.run() after.
  require(['testFile'],
  function(TestFile) {
    mocha.run();
  });
});
...