Herkese merhaba! Bu makaleyi yazmam için öğrencilerim ve danışanlarım bana ilham verdi. test otomasyonu sürecine alışır alışmaz öğrenmelerini sıklıkla öneririm. REST API testi açısından test otomasyon çerçevenizde TypeScript kullanmanın özelliklerinin neler olduğunu görelim… JavaScript'teki TypeScript'i Bir test projesinin tam kodunu bulabilirsiniz. burada TypeScript ne olduğu ve nasıl farklı olduğu konusuna çok fazla girmeyelim ve önemli olanı belirtelim - . Ama aynı zamanda oldukça önemli; doğrudan ( platformu) bağlıdır. TypeScript'in JavaScript'ten bu dili programlama JavaScript'e Node.js bir paketi olarak sunuluyor, bu yüzden buna bazı harika özelliklere sahip olarak bakıyorum. TypeScript Node.js JavaScript Dilin kendisi ve neler sunabileceği hakkında daha fazla bilgi edinmek için lütfen ziyaret edin, biz de test otomasyonu açısından özellikleri hakkında konuşacağız… resmi web sitesini Proje kurulumu test otomasyonu projesi oluşturma sürecini inceleyelim: TypeScript'te Bir projesi oluşturun. Node.js npm init -y paketini yükleyin. TypeScript npm i typescript Proje için varsayılan bir yapılandırması oluşturun - . TypeScript tsconfig.json npx tsc --init Yukarıdaki komut varsayılan bir yapılandırma dosyası oluşturacaktır, ancak bunu gibi bir şeye kısaltmanızı öneririm: şunun { "compilerOptions": { "baseUrl": "./", "module": "esnext", "target": "esnext", "sourceMap": false, "moduleResolution": "node", "allowJs": true, "skipLibCheck": true, "resolveJsonModule": true, "allowSyntheticDefaultImports": true, "paths": { "*": ["./*"] } } } Bu yapılandırma gerekli minimum değeri içerir: En son sürümünü kullanır, EcmaScript JSON içe aktarmalarını kullanılabilir hale getirir, içe aktarmada mutlak yolu kullanmanızı sağlar. kullanarak yapılandırmanızı genişletebilirsiniz. Resmi belgeleri Araç seçimi ekosisteminin sunduğu herhangi bir aracı kullanabilirsiniz, ancak deneyimlerime göre çoğu birkaç iyi nedenden dolayı seçiyor: Node.js TypeScript ile çalışan mühendislerin Jest'i mükemmel topluluk desteği (güncellemeler, yanıtlar, belgeler, kod örnekleri), esnek konfigürasyon. Daha önce projenin çekirdeğini oluşturmak için + kullanmaktan keyif alıyordum, ancak şimdi hem test çalıştırıcısı hem de iddia kitaplığı içerdiği için de bağlı kalıyorum. Mocha Chai'yi Jest'e en popüler HTTP istemcisi gibi görünüyor, bu yüzden sizin de seçiminizi yapmanızı öneririm. Axios Kurulumunuz için bunu kullanmak zorunda kaldığınızı söyleyemem ama projelere baktığınızda bunun olağan bir şey olduğunu söylüyorum. Şimdi bu paketleri bağımlılık olarak kurmanız yeterli: npm i jest axios Koleksiyonları yazın Bazı paketler ( gibi) içinde türleri içerir, ancak içermez. Ayrıca, düzgün çalışması için ile birlikte bir paketi gerekir - ilki özelliklerini etkinleştirir ve ikincisi kullanmanızı sağlar. Axios TypeScript Jest ve Mocha Jest'in @types/jest ts-jest TypeScript IntelliSense Bu nedenle, bazı paketleri kullanmaya çalışırken otomatik tamamlama özelliğiniz yoksa, muhtemelen tür bildirimlerini kaçırdığınızı unutmayın. ile ilgili uzantıları (paketleri) de yükleyelim: TypeScript npm i ts-jest @types/jest Yapılandırma , bir yapılandırma ön ayarı gerektirir, bu nedenle bunu config (veya ) dosyanızda bildirmeniz gerekir: Jest ts-jest package.json { "jest": { "preset": "ts-jest" } } planlıyorsanız yapılandırmanızı da ayarlamanız gerekir: Bir proje içinde mutlak yol kullanmayı { "jest": { "preset": "ts-jest", "moduleDirectories": [ "node_modules", "<rootDir>" ] } } Bu yapılandırma, testleri basit bir komutla çalıştırmanıza olanak ... jest Bu nedenle dosyasındaki komut dosyanızı şu şekilde yapılandırın: package.json test { "scripts": { "test": "jest" } } Daha sonra testlerinizi istediğiniz zaman veya komutuyla çalıştırın. npm test npm run test Ayrıca bir kullanıcısıysanız yüklemenizi öneririm; bu, yalnızca tek bir tıklamayla istediğiniz testleri/paketleri / olanak tanır. yerleşik bir özelliktir. Visual Studio Code bir Jest Runner uzantısı çalıştırmanıza hata ayıklamanıza WebStorm'da Özel türler REST API testine sunduğu ana özellik... , Elbette! TypeScript'in türleri İstek ve yanıt metninizin nasıl görünmesi gerektiğini beyan edebilirsiniz; , ve benzeri. anahtar isimler değer türleri Örnek olarak bir sunucusunu ele alalım - bitiş noktası için request body payload'unu bir tür olarak yazabiliriz: Paysis /auth export type AuthRequestBody = { login: string password: string } Yanıt gövdesi için de aynısı - isteğimize hangi sunucunun göndermesi gerekir: export type AuthResponseBody = { token?: string message?: string } Başarı/başarısızlık senaryoları için farklı bir veri yükü olacağından, anahtarları " aracılığıyla "isteğe bağlı" olarak işaretleyebilirsiniz. karakter. ?" İşlem tamamlandıktan sonra, testlerinizde istek ve doğrulama oluşturmak için bu türleri kullanabilirsiniz... Rica etmek request config aracılığıyla hangi gövdeyi gönderdiğinizi söyleyebilirsiniz: Axios'ta const payload: AxiosRequestConfig<AuthRequestBody> = { method: 'post', url: '/auth', data: { login: process.env.USERNAME, password: process.env.PASSWORD, }, } içindeki tam olarak bunu ifade eder ☝️ AxiosRequestConfig<AuthRequestBody> AuthRequestBody Bu, nesnesinde sağlanan türüyle eşleşen yükü kullanmaya zorlanacağınız anlamına gelir. Gerekli alanlardan bazılarını ayarlamayı unutursanız veya aşırı olanları ayarlamayı unutursanız bir hata görürsünüz. data AuthRequestBody Cevap Aynı şey tepki konusunda da yapılabilir: const response: AxiosResponse<AuthResponseBody> = await client.request(payload) nesnesine otomatik tamamlama ekleyecektir, böylece veya alanlarına erişebileceksiniz. response.data response.data.token response.data.message Gelişmiş araçlar Yukarıdaki basit şeylerin dışında, da mümkündür. Şemayla eşleşip eşleşmediğini görmek için yanıt gövdesindeki her bir anahtarı kontrol etmenize değil, olanak tanır. özel türlerinizden bir JSON şeması oluşturmak tüm yükü kontrol etmenize Yani fikir şu: Özel türlerden bir oluşturun. JSON şeması Yanıt gövdesini doğrulamak için özel bir eşleştirici kullanın. toMatchSchema Oldukça hoş şeyler, ancak bu değişikliklerden sonra testlerinizin kesintiye uğrayabileceğini unutmayın; bu, bazı ek alanlar göründüğünde olur, dolayısıyla şemayı düzenli olarak güncellemeniz gerekir. Çözüm kurulumu zor olabilir, özellikle de ilk seferinizse, ama buna değer! TypeScript Giriş ve çıkış verilerinizi türlerle kaplarsanız, bu nesneleri ayrıştırırken yazım hatası veya başka bir sözdizimi hatası yapmanızın hiçbir yolu yoktur. Sizi basit hatalardan kurtarır ve isteklerinizin yapısını doğrudan kodunuzda görmenizi sağlar, böylece herhangi bir açmanıza ( gibi) ve hangi gövdeyi istediğini/yanıt verdiğini görmek için ihtiyacınız olan isteği aramanıza gerek kalmaz. ile. HTTP koleksiyonu Postman Deneyiminizi ve bu konuda ne düşündüğünüzü bana bildirin.