ياسمين - اختبار وحدة تايب سكريبت للطرق الخاصة والمحمية
أريد أن أتمكن من اختبار طرق Typescript الخاصة. الرجاء تخطي محاضرتك عن لماذا هذه فكرة سيئة. لقد سمعتها.
إليك كود تجريبي:
class MyClass {
age: number
private ageAsString(): string {
return '15'
}
}
إليك خياراتي في ملف الاختبار:
1 - اكتب //@ts-ignore والذي يسمح لـ TS بترجمة هذا السطر. هذا يصبح غير مريح بسرعة كبيرة عندما تقوم باستدعاء 200 x expect()s. لكنني لم أتمكن من إيجاد طريقة للقيام بهذا على شكل كتلة بناءً على الملف.
it('Test ageAsString', () => {
// @ts-ignore
expect(new MyClass().ageAsString()).to.equal('15')
})
2 - تحويل كائن من الفئة إلى كائن any. هذا يعطل ميزات الإكمال التلقائي وإعادة التهيئة التي أحصل عليها من TypeScript وIDE الخاص بي. يبدو وكأنه فكرة جيدة في البداية، لكن بعد شهر واحد إما أنه سيكسر 200 من حالات الاختبار الخاصة بي أو يخلق بعض الأخطاء غير المتوقعة.
it('Test ageAsString', () => {
const anyClass: any = new MyClass
expect(anyClass.ageAsString()).to.equal('15')
})
3 - يمكن استخدام الوصول إلى المصفوفة، وهو يعمل ولكنه يسبب نفس المشاكل مثل #2.
it('Test ageAsString', () => {
expect(new MyClass()['ageAsString']()).to.equal('15')
})
أريد بطريقة ما أن أتمكن من اختبار هذه الطرق دون التعرض للسلبيات. حالياً لدي خياران، كلاهما سيئ.
- تجنب كتابة اختبارات وحدة محددة ومفصلة
- اجعل الطريقة عامة
من فضلك أعطني خيارًا ثالثًا
الإجابة رقم 1
طريقة أخرى لاختبار الطرق المحمية هي إنشاء فئة زائفة وتمديد الفئة الخاصة بك التي تحتاج إلى اختبارها.
class MyClass {
protected test() {
return true;
}
}
class FakeMyClass extends MyClass {
public test() {
return super.test();
}
}
it('test', () => {
const myClass = new FakeMyClass();
expect(myClass.test()).to.true;
})
