Как выполнить юнит-тестирование объекта, содержащего объединение типов, используя машинопись, карму и синон?

Я делаю юнит-тестирование для проекта, который написан в машинописном тексте с угловым фреймворком, применяя карму с фреймворками мокко и чай. И есть интерфейс для объекта как:

interface ISolution {
    _id: string;
    paymentFrequency: PaymentFrequency;
};

И тип PaymentFrequency определяется как:

type PaymentFrequency = 'MONTHLY' | 'ANNUAL' | 'SINGLE';

В контроллере

open(solution: ISolution) { };

Проблема в том, когда я пытался смоделировать решение как:

let solution = { _id: 'aa0', paymentFrequency: 'MONTHLY', ....};
let spy = sandbox.stub(controller, 'open').withArgs(solution);

Typescript дал мне ошибку, так как "строка типа не может быть назначена типу paymentFrequency". Дайте мне знать, если есть способ справиться с этим.

2 ответа

Решение

Вы можете попробовать использовать следующие типы становится интерфейсом. Потому что вместо любого это будет строгая проверка типов.

обратитесь за разъяснениями

Пример:

interface ISolution {
    _id: string;
    paymentFrequency: monthly | annual | single
};

interface monthly{
    kind:"MONTHLY"
}
interface annual{
    kind:"ANNUAL"
}
interface single{
    kind:"SINGLE"
}


var fun=(obj:ISolution)=>{
 console.log("hererer",obj)
} 
var y:monthly={kind : "MONTHLY"}
var x= { _id: 'aa0', paymentFrequency:y}
fun(x)

Всегда можно отключить проверки типов в тестах с <any> Тип приведения, когда это необходимо, но это не так. На самом деле, система ввода здесь обнаружит ошибку, Monthly не MONTHLY и, конечно, не совместим с PaymentFrequency,

let solution = { _id: 'aa0', paymentFrequency: 'MONTHLY', ....};

приведет к выводу solution тип, { _id: string, paymentFrequency: string }, Информация, которая paymentFrequency на самом деле MONTHLY потерян, paymentFrequency не совместим с и PaymentFrequency, а также solution больше не совместим с ISolution,

Так должно быть:

let solution: ISolution = { _id: 'aa0', paymentFrequency: 'MONTHLY', ....};
Другие вопросы по тегам