Я работаю над сетевой 3D-игрой. Мой проект полностью настроен на TypeScript.
У меня вся маршрутизация настроена с помощью Angular, и наряду с этим я использую Three.js в качестве своего 3D-движка.
Наконец, у меня есть комбинация Mocha + Chai для тестирования моего TypeScript с помощью специального плагина под названием требуется машинопись.
Я использую Systemjs в качестве средства импорта для своих пакетов JSPM.
Итак, для подготовки:
(файлы урезаны для примера)
Файл Systemjs/JSPM: jspmconfig.js
System.config({
...
paths: {
...
"github:*": "jspm_packages/github/*"
...
},
map: {
...
"three.js": "github:mrdoob/three.js@master"
...
}
});
Файл узла: package.json
...
"scripts": {
"test": "mocha --compilers ts:typescript-require ./source/**/*.spec.ts"
},
...
Файл контроллера: QuestDetailCtrl.ts
:
/// <reference path="../../../../../typings/tsd.d.ts" />
// Controller | Dashboard
export default class QuestDetailCtrl {
...
// Constructor
constructor() { ... }
renderer: THREE.WebGLRenderer = new THREE.WebGLRenderer(); // <-- This line uses a THREE instance.
}
ПРИМЕЧАНИЕ Где-то ранее в моем приложении я уже импортировал Three.js, поэтому он доступен в моем контроллере (это также правильно компилируется в ES5 и работает в браузер).
Тестовый файл Мокко QuestDetailCtrl.spec.ts
/// <reference path="../../../../../typings/tsd.d.ts" />
// Imports
import { assert, expect } from 'chai';
import QuestDetailCtrl from './QuestDetailCtrl';
// Describe
describe('QuestDetailCtrl', function() {
// Shoulds
it('should exist', () => {
expect(QuestDetailCtrl).to.exist; // <-- WORKS
});
it('should initialize', () => {
let instance = new QuestDetailCtrl(); // <-- DOES NOT WORK
});
});
В последнем файле QuestDetailCtrl.spec.ts
я инициализирую новый экземпляр моего контроллера (класс TypeScript).
Поскольку Mocha не знает о Three.js, этот тест не проходит при инициализации экземпляра моего контроллера.
Итак, мой вопрос становится:
Как мне имитировать/импортировать Three.js (или любую другую стороннюю библиотеку) в мои тесты, чтобы Mocha знал об этом и мог протестировать/инициализировать его?
Я предполагаю, что подобные ситуации применимы к Angular, когда я начинаю тестировать это, поэтому решение будет очень признательно!
Я уже сталкивался с решениями, в которых можно было бы import System from 'systemjs'
и установить meta
данных в библиотеку three.js
, чтобы установить global
переменных для системы, но я не мог заставить это работать.
Спасибо!