Моя компания разработала собственную тестовую среду для программного обеспечения, потому что невозможно использовать среду с открытым исходным кодом в контексте разрабатываемого нами программного обеспечения.
В любом случае, я написал Файлы определения Typescript, чтобы улучшить завершение кода для VS Code, но я не могу заставить его работать для следующей настройки:
Следующий класс используется для определения модульных тестов. Он обеспечивает некоторые функции, например, для утверждений. Основная проблема - это пространство имен утилит. Вы можете пройти функцию, которая на самом деле является модульным тестом. Обратите внимание, что объект this этой функции указывает на класс модульного теста, поэтому переданная функция может использовать функции модульного теста (внутренне переданная функция будет вызываться с помощью "unitTest.call (this)") для установки этот объект функции для экземпляра модульного теста)
class UnitTest {
constructor(unitTest: (this: UnitTest) => void);
.
.
.
util = Util; // Referes to the Util-Class (it's a class because its the only possibility in typescript for nesting
Util-класс предоставляет некоторые общие функции, которые полезны для написания тестов
class Util {
static createFile(filePath: string): File;
.
.
.
}
Если вы объявляете юнит-тест таким образом, все работает нормально:
var unitTest = new UnitTest(function() {
this.util.createFile("..."); // VS-Code provides code completion for that functions of the unit-test-namespace
});
Проблема в том, что класс утилит (который используется для
инкапсуляция кода) может быть расширена в каждом проекте. Вы можете определить сценарий, следуя определенной схеме имени, и тестовая структура динамически загружает этот сценарий и предоставляет эти функции в пространстве имен util, например, "Test.util.myProject.js"
module.exports = {
myCustomUtilFunction = function () { ... }
};
Просто предоставив скрипт, вы можете использовать эту функцию в своем модульном тесте:
var unitTest = new UnitTest(function() {
this.util.myCustomUtilFunction();
});
Но я не могу охватить это файлом определения машинописи. VS-Code не обеспечит никакого дополнения кода для пользовательских утилит, потому что оно отсутствует в определении машинописного текста тестовой среды. Я попытался расширить класс Util следующим образом, но VS-Code это не волнует:
class Util {
static myCustomUtilFunction(): void;
}
Есть идеи, как это решить?
Чтобы было легче понять, вот полная настройка
testframework.d.ts
class UnitTest {
constructor(unitTest: (this: UnitTest) =>
util = Util;
}
class Util {
static createFile(filePath: string): File;
}
myExtendedUtilNamespace.d.ts
class Util {
static myCustomUtilFunction(): void;
}
unitTests.js
var unitTest = new UnitTest(function() {
this.util.createFile("..."); // works
this.util.myCustomUtilFunction(); // does not work
});