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