Как выполнить юнит-тестирование объекта, содержащего объединение типов, используя машинопись, карму и синон?
Я делаю юнит-тестирование для проекта, который написан в машинописном тексте с угловым фреймворком, применяя карму с фреймворками мокко и чай. И есть интерфейс для объекта как:
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', ....};