karma example javascript node.js jasmine jasmine-node

javascript - example - Exportación de clases con node.js



javascript jasmine example (4)

Esto debería corregir el error que estaba teniendo al ejecutar sus pruebas a través de jasmine-node:

// Generated by CoffeeScript 1.6.2 (function() { var Bob; Bob = (function() { function Bob() {} Bob.prototype.hey = function(what) { return ''Whatever.''; }; return Bob; })(); module.exports = Bob; }).call(this);

Tengo el siguiente código de prueba que está siendo ejecutado por jasmine-node en un archivo llamado bob_test.spec.js

require(''./bob''); describe("Bob", function() { var bob = new Bob(); it("stating something", function() { var result = bob.hey(''Tom-ay-to, tom-aaaah-to.''); expect(result).toEqual(''Whatever''); }); });

Para hacer que la prueba pase, he escrito el siguiente código de producción en un archivo llamado bob.js

"use strict"; var Bob = function() { } Bob.prototype.hey = function (text) { return "Whatever"; } module.exports = Bob;

Cuando ejecuto la prueba, uso jasmine-node . - Obtengo la siguiente F

Failures: 1) Bob encountered a declaration exception Message: ReferenceError: Bob is not defined Stacktrace: ReferenceError: Bob is not defined at null.<anonymous> (/Users/matt/Code/oss/deliberate-practice/exercism/javascript/bob/bob_test.spec.js:4:17) at Object.<anonymous> (/Users/matt/Code/oss/deliberate-practice/exercism/javascript/bob/bob_test.spec.js:3:1) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17) at require (module.js:380:17) Finished in 0.02 seconds 1 test, 1 assertion, 1 failure, 0 skipped

Basado en lo que entiendo sobre Javascript, siento que esto debería funcionar. ¿Qué hace node.js de manera diferente con las funciones de constructor y las exportaciones de módulos que previenen que esto funcione, me gusta pensar que debería?


Mejorando marvin''s respuesta marvin''s :

"use strict"; var Bob = function() {} Bob.prototype.hey = function (text) { return "Whatever"; } module.exports = new Bob(); // another file var Bob = require(''./bob''); Bob.hey(''text'');

Entonces puede crear un objeto pasándolo a module.exports module.exports = new Bob();


Si puede usar ECMAScript 2015 puede declarar y exportar sus clases y luego ''importar'' sus clases utilizando la desestructuración sin necesidad de utilizar un objeto para llegar a los constructores.

En el módulo que exporta de esta manera

class Person { constructor() { this.type = "Person"; } } class Animal{ constructor() { this.type = "Animal"; } } module.exports = { Person, Animal };

entonces donde los usas

const { Animal, Person } = require("classes"); const animal = new Animal(); const person = new Person();


requiere devuelve un objeto, debe almacenarlo en algún lugar

var Bob = require(''./bob'');

y luego usa este objeto

var bobInstance = new Bob();