2012-02-20 6 views
9

Я включаю Mocha.js с отличным use shim для сайта на основе Require.js.Доступ к «глобальным» функциям mocha.js при использовании 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'). Я знаю, что чего-то не хватает. Вероятно, передавая контекст мокке как-то.

ответ

6

Я нашел решение в проекте amd-testing examples geddski.

Вместо включения тестовый файл (ы) в верхней части вместе с мокко, как так:

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

тестовый файл (ы) должны быть включены в другой требует вызова и 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(); 
    }); 
}); 
+0

Кроме того, вы захотите передать завершенный параметр в нем() и выполнить вызов() в своих тестовых случаях. В противном случае ваш тест может выдать ошибку, но мокка заявит, что она прошла. – baalexander

+0

Yuck! Это лучшее решение? –

+0

Этан - Я надеюсь, что есть лучшее решение. Пожалуйста, напишите еще один ответ, если найдете его! – baalexander

13

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

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

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

Файлы тестов должны требовать мокко.

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

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

+1

Увы, для пользователей узлов: «Ошибка: настройка Shim не поддерживается в узле» – mikemaccana

+0

это сработало для меня (requirejs + configfile + testem + mocha) – oak

+0

Работал и для меня. Большое спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^