Javascript “访问”;“全球”;使用require.js时mocha.js函数

Javascript “访问”;“全球”;使用require.js时mocha.js函数,javascript,requirejs,mocha.js,Javascript,Requirejs,Mocha.js,我将Mocha.js包含在基于Require.js的站点中,非常适合 使用Require.js时,如何访问Mocha声明的define()和it()BDD函数 下面是一个基本代码示例: test.js: var mocha = require('use!mocha') , testFile = require('testFile.js') mocha.setup('bdd'); mocha.run(); testFile.js: define(function(require) {

我将Mocha.js包含在基于Require.js的站点中,非常适合

使用Require.js时,如何访问Mocha声明的define()和it()BDD函数

下面是一个基本代码示例:

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() {

    });
  });
});
在浏览器中运行时,我得到错误
uncaughtreferenceerror:description未定义


我尝试了window.description,并尝试将require('testFile.js')移到mocha.setup('bdd')之后。我知道我错过了什么。可能是以某种方式将上下文传递给了摩卡。

我在geddski的项目中找到了解决方案

不要像这样将测试文件和摩卡咖啡一起放在顶部:

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

问题是诸如
descripe
it
之类的全局函数是由
mocha.setup()
设置的。在导出mocha之前,可以使用shim config的
init
属性调用
mocha.setup()

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
属性。您可能可以使用
exports
属性而不是
init

此外,您还需要在它()中传递done参数,并在测试用例中调用done()。否则,您的测试可能会抛出一个错误,但摩卡将声称它通过了。恶心!这仍然是最好的解决方案吗?伊森-我希望有更好的解决方案。请张贴另一个答案,如果你找到一个!我的解决方案是在我的RequireJS构建中不将Mocha/Chai设置为依赖项。结果太复杂了,到底是为了什么?我仍然使用RequireJS将所有测试构建到一个脚本中(并管理仅测试的依赖项),但我现在假设我已经加载了app、Mocha、Chai,然后是测试。您可以将这些作为参数传递给TestCular之类的运行程序,也可以使用手动排序脚本标记的TestRunner HTML页面。我觉得这是一个很好的折衷解决方案。请注意,我也总是找到依赖项,并且我不从CDN加载脚本或使用“异步”样式加载脚本。。。因此,此解决方案可能适用于您,也可能不适用于您,这取决于您的具体情况。唉,对于节点用户来说:“错误:节点中不支持垫片配置”,这对我来说也适用(requirejs+configfile+testem+mocha)。非常感谢你。