2017-08-15 1 views
1

Kann ich Mokkamodul asynchron im Browser laden? Ich kann es mit Chai sicher machen. Gibt es einen Workaround, um Mocha in einem AMD-ähnlichen Stil zu erstellen?Mochajs asynchron ausführen (AMD-like)

require.config({ 
    baseUrl: "/scripts", 
    paths: { 
     "mocha": "framework/mocha", 
     "chai": "framework/chai", 
     "first": "custom/first" 
    } 
}); 

require(['first', 'mocha', 'chai'], function (first, mocha, chai) { 
     first.echo(); 

     console.log('something'); 
     console.log('something'); 

     mocha.ui('tdd'); 
     var assert = chai.assert; 

     suite('"Home" Page Tests', function() { 
      test('page should contain link to contact page', function() { 
       assert($('a[href="/contact"]').length); 
      }); 
     }); 

     mocha.run(); 

     console.log('whatever'); 
    }); 

in dem Codebeispiel oben first und chai funktionieren, während mocha ist nicht definiert.

Antwort

1

Mocha ist nicht AMD-bewusst. Wenn Sie also Mocha mit RequireJS laden wollen, benötigen Sie einen shim dafür. Hier eine index.html Datei, die ein minimales Beispiel enthält:

<!DOCTYPE html> 
<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8"/> 
    <link href="node_modules/mocha/mocha.css" type="text/css" media="screen" rel="stylesheet" /> 
    <script type="text/javascript" src="node_modules/requirejs/require.js"></script> 
    </head> 
    <body> 
    <div id="mocha"></div> 
    <script> 
     require.config({ 
      paths: { 
       mocha: 'node_modules/mocha/mocha', 
      }, 
      shim: { 
       mocha: { 
       exports: "mocha", 
       } 
      }, 
     }); 

     require(["mocha"], function (mocha) { 
     mocha.setup("bdd"); 
     it("foo", function() {}); 
     mocha.run(); 
     }); 
    </script> 
    </body> 
</html> 

Sie müssen npm install requirejs mocha im gleichen Verzeichnis laufen haben, wo index.html befindet.

In Fällen, in denen ich in der Lage sein wollen, die Mocha Konstruktor zu verwenden, verwende ich diese shim statt:

shim: { 
     mocha: { 
      exports: "mocha", 
      init: function() { return {mocha: mocha, Mocha: Mocha }; } 
     } 
    }, 
Verwandte Themen