@types/2.5.46
وواجهت مشاكل.Definitions by:
في index.d.ts
) حتى يتمكنوا من الرد .في 2.5.45 تمكنت من القيام بشيء من هذا القبيل:
expect(element(by.id('id')).getAttribute('attr')).toEqual('myValue');
الآن يعطيني خطأ
TS2345:Argument of type '"myValue"' is not assignable to parameter of type 'Expected<Promise<string>>'.
يتوقف عن الشكوى إذا أضفت .toString بعد getAttribute ولكني لست متأكدًا من أنه سيعمل.
نعم ، هذه مشكلة كبيرة لأي شخص يستخدم المنقلة في TypeScript.
يبدو أن Jasmine (أو ربما نسخة منقلة من Jasmine إذا كانت تعدلها - لست متأكدًا؟) تدعم توقع الوعد ثم اختبار القيمة المحسومة للوعد ، دون أن يضطر مؤلف الاختبار إلى حل الوعد بنفسه.
يبدو أن @ lukas-zech-software جعل المباريات عامة ، وهو أمر رائع حقًا ، لكنه يكسر الوعود ويتطابق مع القيم التي تم تحديدها.
كما ذكرنا سابقًا في تعليقات العلاقات العامة ، هذا ليس شيئًا يمكن أن تفعله كتابات الياسمين.
تعمل المنقلة على توسيع الوظائف بحيث يتعين عليها توفير الكتابة لهذا الغرض.
إذا كان هناك أي كتابة لمنقلة على DefinitelyTyped ، لكان هذا قد حدث أثناء الاختبارات ولكن لا يوجد لذلك لا يمكنني إصلاح هذا هنا.
في الواقع لا تقدم منقلة أي كتابات على الإطلاق لهذا الغرض ، لذا فهي تعتمد ببساطة على expect
قبول any
كمعامل
بالكاد يمكنني إضافة كتابات لـ expect
غير المتزامن والذي لن يعمل في الياسمين نفسه.
يرجى فتح مشكلة بالمنقلة واطلب منهم تمديد كتابة الياسمين بشكل صحيح.
حتى يتم إصلاح ذلك ، هناك العديد من الحلول:
إصلاح إصدار الكتابة إلى 2.5.45
سيستخدم هذا ببساطة أحدث إصدار عمل.
يبدو أن إصلاح إصدار الكتابة أصبح من أفضل الممارسات على أي حال لأن الكتابة لا يمكن أن تتبع SemVer ويمكن أن تؤدي التغييرات في الإصدار الثانوي إلى كسر التصميم بسهولة.
راجع هذه المشكلات:
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14579
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14569
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14338
https://github.com/DefinitelyTyped/DefinitelyTyped/pull/13994#issuecomment -275949045
استخدم any
كمعامل عام لـ expect
لا تزال الكتابة الجديدة تسمح لك بالحصول على السلوك القديم ، ما عليك سوى أن تحدد بوضوح أنك تريد استخدام any
كنوع مثل هذا
expect<any>(element(by.id('id')).getAttribute('attr')).toEqual('myValue');
expect
وأضفها إلى مشروعك // UNTESTED CODE!
interface AsyncMatchers<T> extends Matchers<Promise<T>> {
toBe(expected: Expected<T>, expectationFailOutput?: any): boolean;
toEqual(expected: Expected<T>, expectationFailOutput?: any): boolean;
toContain(expected: T, expectationFailOutput?: any): boolean;
not: AsyncMatchers<T>;
}
أضف هذا الرمز في protractor.d.ts
في مشروعك في مكان ما يمكن أن يراه مترجم TypeScript ويجب أن يحل مشاكلك ، بالنظر إلى الوعد في expect
الذي يحل بالفعل إلى النوع المقدم في toEqual
رائع ، شكرًا لتوضيح هذا @ lukas-zech-software. نقدر الحلول المختلفة. انتهى بي الأمر بإغلاق الكتابة على إصدار سابق في الوقت الحالي.
اقترح هذا يمكن إغلاقه.
استخدام غير متزامن / انتظار "dereference" يعمل الوعد.
على سبيل المثال بدلاً من
it('should have header', () => {
let subject = element(by.css('h1')).isPresent();
let result = true;
expect(subject).toEqual(result);
});
احصل عليه كما
it('should have header', async () => {
let subject = await element(by.css('h1')).isPresent();
let result = true;
expect(subject).toEqual(result);
});
توقع(
إلى
توقع
عملت بالنسبة لي
تثبيت @types/jasminewd
العمل بالنسبة لي ، من الرابط
beforeEach (() => {
الصفحة = xxx جديد () ؛
browser.waitForAngularEnabled (خطأ) ،
}) ؛
هذا يحل المشكلة
بالنسبة لي ، نجح تعديل tsconfig.e2e.json
لكل هذا التعليق. ظهرت مشكلتي عند التحديث من Angular 4 إلى 5 في مشروع يديره CLI.
https://github.com/angular/protractor/issues/4176#issuecomment -310610380
إذا كنت تستطيع التعايش مع عدم الدقة ، يبدو أن هناك حلًا مختلفًا هو التخلص من المساواة مع السلسلة والمطالبة بدلاً من ذلك بـ toContain.
أدى تثبيت @types/jasminewd2
حل المشكلة بالنسبة لي
بالنسبة لي ، نجح تعديل
tsconfig.e2e.json
لكل هذا التعليق. ظهرت مشكلتي عند التحديث من Angular 4 إلى 5 في مشروع يديره CLI.
الزاوي / منقلة # 4176 (تعليق)
تثبيت @types/jasminewd2
والقيام بذلك هو الحل الصحيح.
إشعار تثبيت @types/jasminewd2
__IS NOT__ إجابة صحيحة:
jasminewd2
ليس بالضرورة متوافقًا مع كتابة الياسمين لـ v3 ، لأنه يستهدف jasmine v2any
-d جميع المدخلات.الجواب الصحيح إما:
expectAsync
المتوفر بأحدث الياسمين.
التعليق الأكثر فائدة
حتى يتم إصلاح ذلك ، هناك العديد من الحلول:
إصلاح إصدار الكتابة إلى 2.5.45
سيستخدم هذا ببساطة أحدث إصدار عمل.
يبدو أن إصلاح إصدار الكتابة أصبح من أفضل الممارسات على أي حال لأن الكتابة لا يمكن أن تتبع SemVer ويمكن أن تؤدي التغييرات في الإصدار الثانوي إلى كسر التصميم بسهولة.
راجع هذه المشكلات:
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14579
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14569
https://github.com/DefinitelyTyped/DefinitelyTyped/issues/14338
https://github.com/DefinitelyTyped/DefinitelyTyped/pull/13994#issuecomment -275949045
استخدم
any
كمعامل عام لـexpect
لا تزال الكتابة الجديدة تسمح لك بالحصول على السلوك القديم ، ما عليك سوى أن تحدد بوضوح أنك تريد استخدام
any
كنوع مثل هذاexpect
وأضفها إلى مشروعكسيكون هذا هو الحل الأفضل ولكن يجب أن يتم بواسطة المنقلة
من المحتمل أن يبدو شيء مثل
أضف هذا الرمز في
protractor.d.ts
في مشروعك في مكان ما يمكن أن يراه مترجم TypeScript ويجب أن يحل مشاكلك ، بالنظر إلى الوعد فيexpect
الذي يحل بالفعل إلى النوع المقدم فيtoEqual