В приведенном ниже коде, хотя функция test2
недействительна, это не должно влиять на тестирование функции test1
:
export function test1(): boolean {
return true;
}
export function test2(): number {
return "1";
}
Тест:
import { assert as Assert } from "chai";
import { test1 } from "./example";
describe("Example", (): void => {
it("Example", (): void => {
Assert.isTrue(test1());
});
});
Однако Мокко , выполненный TSNode, потерпит неудачу:
TSError: ⨯ Unable to compile TypeScript:
Source/ProjectBuilder/example.ts(6,3): error TS2322: Type '"1"' is not assignable to type 'number'.
Возможно ли заставить TSNode завершить вышеуказанный тест? У TypeScript есть опция noEmitOnError
...
Мой mochar c .yaml:
extension:
- ts
spec: "**/*.test.ts"
require:
- ts-node/register
- tsconfig-paths/register
Зачем мне это нужно
Согласно Чистая архитектура , «Деловые правила не должны ни от чего зависеть, и они должны быть проверяемыми». Но даже если бизнес-правила не зависят от представлений, контроллеров и т. Д. c., Мы не сможем проверить это, если какие-либо ошибки в представлениях, контроллерах и т. Д. c. существует.
Когда я изменяю бизнес-логику c в своем приложении, все, что от нее зависит, становится недействительным. Предположим, что в моей сущности в бизнес логи c type User { name: string; age: number }
было изменено на тип Пользователь { fullName: string; age: string; }
. Все, что зависит от бизнес-логики c (представление, контроллеры, докладчики и т. Д. c.), Становится недействительным - мне тоже нужно исправить это в соответствии с обновленной бизнес-логикой c.
// In business rules:
type User = {
ID: number;
fullName: string;
age: string; // in past - number
}
// In controller:
class UserProfileController {
// ...
// All what comes from input field is string ↓
private onClickChangeUserAge(inputtedUserAge: string) {
// This expression obeys to previous version of business rules!
this.targetUser.age = Number(inputtedUserAge);
// TypeScript will emit type error, when I try to test business rules,
// however business rules does not depend on controller.
}
}
Однако В большом приложении это исправление может занять дни, недели и месяцы. То, как мы можем получить обратную связь, доказывает, что по крайней мере бизнес-логика c работает правильно, и мы на правильном пути?