requirejs jasmine

requirejs - ¿Jasmine 2.0 realmente no funciona con require.js?



(2)

El nuevo boot.js hace un montón de la inicialización y lo adjunta a window.onload () que ya ha sido invocado por el tiempo require.js carga Jasmine. Puede llamar manualmente a window.onload () para inicializar HTML Reporter y ejecutar el entorno.

SpecRunner.html

<!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Jasmine Spec Runner v2.0.0</title> <link rel="shortcut icon" type="image/png" href="lib/jasmine-2.0.0/jasmine_favicon.png"> <link rel="stylesheet" type="text/css" href="lib/jasmine-2.0.0/jasmine.css"> <!-- specRunner.js runs all of the tests --> <script data-main="specRunner" src="../bower_components/requirejs/require.js"></script> </head> <body> </body> </html>

specRunner.js

(function() { ''use strict''; // Configure RequireJS to shim Jasmine require.config({ baseUrl: ''..'', paths: { ''jasmine'': ''tests/lib/jasmine-2.0.0/jasmine'', ''jasmine-html'': ''tests/lib/jasmine-2.0.0/jasmine-html'', ''boot'': ''tests/lib/jasmine-2.0.0/boot'' }, shim: { ''jasmine'': { exports: ''window.jasmineRequire'' }, ''jasmine-html'': { deps: [''jasmine''], exports: ''window.jasmineRequire'' }, ''boot'': { deps: [''jasmine'', ''jasmine-html''], exports: ''window.jasmineRequire'' } } }); // Define all of your specs here. These are RequireJS modules. var specs = [ ''tests/spec/routerSpec'' ]; // Load Jasmine - This will still create all of the normal Jasmine browser globals unless `boot.js` is re-written to use the // AMD or UMD specs. `boot.js` will do a bunch of configuration and attach it''s initializers to `window.onload()`. Because // we are using RequireJS `window.onload()` has already been triggered so we have to manually call it again. This will // initialize the HTML Reporter and execute the environment. require([''boot''], function () { // Load the specs require(specs, function () { // Initialize the HTML Reporter and execute the environment (setup by `boot.js`) window.onload(); }); }); })();

Ejemplo de especificación

define([''router''], function(router) { ''use strict''; describe(''router'', function() { it(''should have routes defined'', function() { router.config({}); expect(router.routes).toBeTruthy(); }); }); });

Estoy configurando mi SpecRunner.html / .js, RequireConfig.js, mis caminos y mis calces al igual que lo hice con los candidatos de versiones anteriores de Jasmine + RequireJs, pero ahora mis métodos de prueba muestran a Jasmine sin definir. Recientemente cambiaron a un método diferente de cargar Jasmine que entiendo que es incompatible con RequireJs.

¿Mi entendimiento es correcto? Si es así, ¿podremos volver a utilizar Jasmine + RequireJs?


Este es un enfoque alternativo que puede ser más simple en algunos casos: use el soporte asíncrono de Jasmine para cargar su módulo AMD antes de ejecutar pruebas, como esto:

en MySpec.js :

describe(''A suite'', function() { var myModule; // Use require.js to fetch the module it("should load the AMD module", function(done) { require([''myModule''], function (loadedModule) { myModule = loadedModule; done(); }); }); //run tests that use the myModule object it("can access the AMD module", function() { expect(myModule.speak()).toBe("hello"); }); });

Para que esto funcione, deberá incluir require.js en su SpecRunner.html y, posiblemente, configurar require (como lo haría normalmente, por ejemplo, al establecer la baseUrl), como esto:

en SpecRunner.html :

<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>Jasmine Spec Runner v2.0.0</title> <link rel="shortcut icon" type="image/png" href="lib/jasmine-2.0.0/jasmine_favicon.png"> <link rel="stylesheet" type="text/css" href="lib/jasmine-2.0.0/jasmine.css"> <script src="lib/require.min.js"></script> <script> require.config({ baseUrl: "src" }); </script> <script src="lib/jasmine-2.0.0/jasmine.js"></script> <script src="lib/jasmine-2.0.0/jasmine-html.js"></script> <script src="lib/jasmine-2.0.0/boot.js"></script> <script src="spec/MySpec.js"></script> </head> <body> </body> </html>

Para este ejemplo, la implementación del módulo AMD podría ser algo como esto:

en src / myModule.js :

define([], function () { return { speak: function () { return "hello"; } }; });

Aquí hay un Plunk en funcionamiento que implementa este ejemplo completo .

¡Disfrutar!