Búsqueda de sitios web

javascript - Probando clase generada por TypeScript con Jasmine


Como dice el título, quiero probar una clase de TypeScript que escribí usando Jasmine (al menos supongo que no puedo probar el archivo .ts directamente?). Supongo que la razón podría ser la forma en que TypeScript compiló el archivo .js.

Así que cuando ejecuto jasmine spec/movieSpec.js, obtengo el siguiente error:

Suite error: Movie
  Message:
    TypeError: Movie is not a constructor
  Stack:
        at <Jasmine>
        at Suite.<anonymous> (/Users/user/Library/Mobile Documents/com~apple~CloudDocs/Coding/TypeScript/mediaparser/spec/movieSpec.js:4:15)
        at <Jasmine>
        at Object.<anonymous> (/Users/user/Library/Mobile Documents/com~apple~CloudDocs/Coding/TypeScript/mediaparser/spec/movieSpec.js:3:1)
        at Module._compile (module.js:652:30)
        at Object.Module._extensions..js (module.js:663:10)
        at Module.load (module.js:565:32)
        at tryModuleLoad (module.js:505:12)
        at Function.Module._load (module.js:497:3)
No specs found
Finished in 0.004 seconds
Randomized with seed 40039 (jasmine --random=true --seed=40039)

Aquí están mis otros archivos:

src/película.ts

export class Movie {
  private name: string;

  constructor(name: string) {
    this.name = name.replace(".mkv", "");
  }
}

dist/movie.js (generado)

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class Movie {
    constructor(name) {
        this.name = name.replace(".mkv", "");
    }
}
exports.Movie = Movie;

spec/peliculaSpec.js

const Movie = require('../dist/movie');

describe("Movie", function() {
  let movie = new Movie("aMovie.mkv");

  it("removes the file extension", function() {
    expect(movie.name).toEqual("aMovie")
  });
});

package.json

{
  "dependencies": {
    "@types/jasmine": "^2.8.9",
    "ts-node": "^7.0.1"
  }
}

Actualización He cambiado el target en tsconfig.json a "ES2016", lo que resulta en un movie.js ligeramente diferente. He actualizado el código en consecuencia. Desafortunadamente, el error sigue siendo el mismo.

Respuesta #1

En tu spec/movieSpec.js, intenta cambiar la declaración require a:

const Movie = require('../dist/movie').Movie;

Creo que tu declaración require no devuelve la clase Movie real. También puedes comprobarlo verificando cuál es el valor real de tu constante Movie