javascript - 使用 Jasmine 测试 TypeScript 生成的类
正如标题所说,我想使用 Jasmine 测试我编写的 TypeScript 类(至少我认为我不能直接测试 .ts 文件?)。我猜原因可能是 TypeScript 编译 .js 文件的方式。
所以当我运行 jasmine spec/movieSpec.js 时,我得到了以下错误:
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)
这是我的其他文件:
src/movie.ts
export class Movie {
private name: string;
constructor(name: string) {
this.name = name.replace(".mkv", "");
}
}
dist/movie.js(生成的)
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class Movie {
constructor(name) {
this.name = name.replace(".mkv", "");
}
}
exports.Movie = Movie;
spec/movieSpec.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"
}
}
更新 我已将 tsconfig.json 中的 target 改为 "ES2016",这导致 movie.js 略有不同。我已相应地更新了代码。不幸的是,错误仍然相同。
答案#1
在你的 spec/movieSpec.js 中,尝试将 require 语句更改为:
const Movie = require('../dist/movie').Movie;
我认为你的 require 语句并没有返回实际的 Movie 类。你也可以通过检查你的 Movie 常量的实际值来验证这一点。
