Тестирование сгенерированного класса TypeScript с помощью Jasmine

Как сказано в названии, я хочу протестировать класс TypeScript, который я написал с помощью Jasmine (по крайней мере, я предполагаю, что не могу напрямую протестировать файл .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"
  }
}

Обновлять Я заменил target в tsconfig.json на "ES2016", в результате получился немного другой movie.js. Я обновил код соответствующим образом. К сожалению, ошибка осталась прежней.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
198
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем spec / movieSpec.js попробуйте изменить инструкцию require на:

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

Я думаю, что ваш оператор require не возвращает фактический класс Movie. Вы также можете проверить это, проверив, каково фактическое значение вашего Movie const.

Вот и все! Не могу поверить, что сам не пришел к такому выводу. Когда я сейчас смотрю на exports.Movie = Movie; из movie.js, это становится очевидным. Большое спасибо! Кстати, можно по-другому написать эту инструкцию require? Полагаю, я не могу использовать здесь import вместо require?

Linus 14.10.2018 10:56

Другие вопросы по теме