@types/2.5.46
dan mengalami masalah.Definitions by:
di index.d.ts
) sehingga mereka dapat merespons .Di 2.5.45 saya bisa melakukan sesuatu seperti itu:
expect(element(by.id('id')).getAttribute('attr')).toEqual('myValue');
Sekarang itu memberi saya kesalahan
TS2345:Argument of type '"myValue"' is not assignable to parameter of type 'Expected<Promise<string>>'.
Itu berhenti mengeluh jika saya menambahkan .toString setelah getAttribute tetapi saya tidak yakin itu akan berhasil.
Ya, ini adalah masalah besar bagi siapa saja yang menggunakan busur derajat di TypeScript.
Tampaknya Jasmine (atau mungkin Jasmine versi Protractor jika memodifikasinya - saya tidak yakin?) mendukung mengharapkan janji dan kemudian menguji nilai yang diselesaikan dari janji, tanpa pembuat tes harus menyelesaikan janji itu sendiri.
Sepertinya @lukas-zech-software membuat kecocokan itu generik, yang sangat keren, tetapi melanggar janji dan mencocokkan dengan nilai yang diselesaikan.
Seperti yang telah disebutkan dalam komentar PR, ini tidak dapat dilakukan oleh pengetikan melati.
Busur derajat memperluas fungsionalitas sehingga harus menyediakan pengetikan untuk ini.
Jika ada pengetikan untuk busur derajat pada PastiTyped ini akan terjadi selama pengujian tetapi tidak ada jadi saya tidak dapat memperbaikinya di sini.
Sebenarnya Protractor tidak menyediakan pengetikan sama sekali untuk ini, jadi mereka hanya mengandalkan expect
menerima any
sebagai parameter
Saya hampir tidak dapat menambahkan pengetikan untuk async expect
yang tidak akan berfungsi di melati itu sendiri.
Silakan buka masalah dengan busur derajat dan minta mereka untuk memperpanjang pengetikan melati dengan benar.
Sampai ini diperbaiki, ada beberapa solusi:
Perbaiki versi pengetikan ke 2.5.45
Ini hanya akan menggunakan versi kerja terbaru.
Memperbaiki versi pengetikan tampaknya menjadi praktik terbaik karena pengetikan tidak dapat mengikuti SemVer dan perubahan dalam versi minor dapat dengan mudah merusak build Anda.
Lihat masalah ini:
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
Gunakan any
sebagai parameter umum untuk expect
Pengetikan baru masih memungkinkan Anda memiliki perilaku lama, Anda hanya perlu menentukan secara eksplisit bahwa Anda ingin menggunakan any
sebagai tipe seperti ini
expect<any>(element(by.id('id')).getAttribute('attr')).toEqual('myValue');
expect
dan tambahkan ke proyek Anda // 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>;
}
Tambahkan kode ini dalam protractor.d.ts
di proyek Anda di suatu tempat yang dapat dilihat oleh kompiler TypeScript dan itu akan menyelesaikan masalah Anda, mengingat janji di expect
sebenarnya menyelesaikan jenis yang disediakan di toEqual
Keren, terima kasih telah menyelesaikan ini @lukas-zech-software. Menghargai solusi yang berbeda. Saya akhirnya mengunci pengetikan ke versi sebelumnya untuk saat ini.
Sarankan ini bisa ditutup.
Menggunakan async/menunggu untuk "dereferensi" janji itu berfungsi.
Misalnya alih-alih
it('should have header', () => {
let subject = element(by.css('h1')).isPresent();
let result = true;
expect(subject).toEqual(result);
});
memilikinya sebagai
it('should have header', async () => {
let subject = await element(by.css('h1')).isPresent();
let result = true;
expect(subject).toEqual(result);
});
mengharapkan(
ke
mengharapkan
itu berhasil untuk saya
Menginstal @types/jasminewd
berfungsi untuk saya, dari tautan
sebelumSetiap(() => {
halaman = baru xxx();
browser.waitForAngularEnabled(salah);
});
ini menyelesaikan masalah
Bagi saya, menyesuaikan tsconfig.e2e.json
per komentar ini berhasil. Masalah saya muncul ketika memperbarui dari Angular 4 ke 5 pada proyek yang dikelola CLI.
https://github.com/angular/protractor/issues/4176#issuecomment -310610380
Jika Anda dapat hidup dengan ketidaktepatan, solusi yang berbeda tampaknya membuang toEqual dengan string dan sebagai gantinya meminta toContain.
menginstal @types/jasminewd2
memecahkan masalah untuk saya
Bagi saya, menyesuaikan
tsconfig.e2e.json
per komentar ini berhasil. Masalah saya muncul ketika memperbarui dari Angular 4 ke 5 pada proyek yang dikelola CLI.
sudut/busur derajat#4176 (komentar)
Menginstal @types/jasminewd2
dan melakukan ini adalah jawaban yang benar.
Perhatikan, pemasangan @types/jasminewd2
__TIDAK__ jawaban yang benar:
jasminewd2
belum tentu kompatibel dengan pengetikan melati untuk v3, karena menargetkan melati v2any
-d semua input.Jawaban yang benar adalah:
expectAsync
tersedia di melati terbaru.
Komentar yang paling membantu
Sampai ini diperbaiki, ada beberapa solusi:
Perbaiki versi pengetikan ke 2.5.45
Ini hanya akan menggunakan versi kerja terbaru.
Memperbaiki versi pengetikan tampaknya menjadi praktik terbaik karena pengetikan tidak dapat mengikuti SemVer dan perubahan dalam versi minor dapat dengan mudah merusak build Anda.
Lihat masalah ini:
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
Gunakan
any
sebagai parameter umum untukexpect
Pengetikan baru masih memungkinkan Anda memiliki perilaku lama, Anda hanya perlu menentukan secara eksplisit bahwa Anda ingin menggunakan
any
sebagai tipe seperti iniexpect
dan tambahkan ke proyek AndaIni akan menjadi solusi terbaik tetapi harus dilakukan oleh Busur Derajat
Mungkin akan terlihat seperti
Tambahkan kode ini dalam
protractor.d.ts
di proyek Anda di suatu tempat yang dapat dilihat oleh kompiler TypeScript dan itu akan menyelesaikan masalah Anda, mengingat janji diexpect
sebenarnya menyelesaikan jenis yang disediakan ditoEqual