摘要:使用可以快速生成一個項目,其中包含了和以及覆蓋率統計的配置參考一個創建測試腳本的快速方法其他參考資料前端自動化測試概覽測試之使用對項目進行單元測試
前言
測試可以提供快速反饋,根據測試用例覆蓋代碼,從而提升代碼開發效率和質量。根據投入產出價值,通常迭代較快的業務邏輯不做測試用例,對通用常用的代碼基本組件或框架需要編寫測試。
在 2018 年年初對測試工具的整體回顧:
An Overview of JavaScript Testing in 2018
測試驅動開發的基本思想就是在開發功能代碼之前,先編寫測試代碼。也就是說在明確要開發某個功能后,首先思考如何對這個功能進行測試,并完成測試代碼的編寫,然后編寫相關的代碼滿足這些測試用例。然后循環進行添加其他功能,直到完全部功能的開發。(mocha示例)
//mocha suite("Array", function() { setup(function() { // ... }); suite("#indexOf()", function() { test("should return -1 when not present", function() { assert.equal(-1, [1,2,3].indexOf(4)); }); }); });BDD 行為驅動開發
Behavior Driven Development,行為驅動開發是一種敏捷軟件開發的技術,它鼓勵軟件項目中的開發者、QA和非技術人員或商業參與者之間的協作。
與一般的自動化測試(如單元測試、服務測試、UI 測試)不一樣的是,BDD 是由多方參與的測試開發方式。如在使用 Protractor 寫 Angular 的 E2E 測試的時候,所以的測試都是前端測試人員編寫的。BDD 最重要的一個特性是:由非開發人員編寫測試用例,而這些測試用例是使用自然語言編寫的 DSL(領域特定語言)。換多話來說,業務人員、測試人員、客戶等利益相關者,以習慣的方式編寫相關的測試用例,再由開發人員去實現相關的測試。
(Jasmine示例)
//Jasmine describe("A suite is just a function", function() { var a; it("and so is a spec", function() { a = true; expect(a).toBe(true); }); });單元測試 Unit Testing
單元測試準則27條
斷言庫node assert
const assert = require("assert"); assert.equal(1, "1");//ok const obj1 = {a: {b: 1}}; const obj2 = {a: {b: 1}}; assert.deepEqual(obj1, obj2);//ok
shouldjs
should(null).not.be.ok(); ({ a: 10}).should.be.eql({ a: 10 }); "ab".should.be.equalOneOf(["a", 10, "ab"]);
chai
//should chai.should(); foo.should.be.a("string"); foo.should.equal("bar"); foo.should.have.lengthOf(3); tea.should.have.property("flavors") .with.lengthOf(3);
//except var expect = chai.expect; expect(foo).to.be.a("string"); expect(foo).to.equal("bar"); expect(foo).to.have.lengthOf(3); expect(tea).to.have.property("flavors") .with.lengthOf(3);
//assert var assert = chai.assert; assert.typeOf(foo, "string"); assert.equal(foo, "bar"); assert.lengthOf(foo, 3) assert.property(tea, "flavors"); assert.lengthOf(tea.flavors, 3);模擬響應數據
Mock
Mock.mock({"number|1-100": 100}) //{"number": 30} Mock.mock({"regexp": /d{5,10}/}) //{"regexp": "365355673"} Mock.mock({ "object|2-4": { "110000": "北京市", "120000": "天津市", "130000": "河北省", "140000": "山西省" } }) /* { "object": { "120000": "天津市", "130000": "河北省", "140000": "山西省" } } */ Random.date() //"2007-10-24" Random.image("200x100", "#4A7BF7", "Hello")端到端測試 End to End Testing
cypress 在瀏覽器中邊預覽執行可視化測試用例,像selenium一樣模擬用戶操作,可以接入Mocha和chai
describe("My First Test", function() { it("clicking "type" navigates to a new url", function() { cy.visit("https://example.cypress.io") cy.contains("type").click() // Should be on a new URL which includes "/commands/actions" cy.url().should("include", "/commands/actions") }) })模擬瀏覽器交互
Nightmare
基于 Electron 的框架,針對 Web 自動化測試和爬蟲。
webdriverio
Node.js的下一代WebDriver測試自動化框架,參考官方代碼示例
jsPerf
benchmark.js
持續集成是一種非常優秀的多人開發實踐,通過代碼push觸發鉤子,實現自動運行編譯、測試等工作。接入持續集成后,我們的每一次push代碼,每個Merge Request都會生成對應的測試結果,項目的其他成員可以很清楚地了解到新代碼是否影響了現有的功能,在接入自動告警后,可以在代碼提交階段就快速發現錯誤,提升開發迭代效率。
持續集成會在每次集成時提供一個幾乎空白的虛擬機器,并拷貝用戶提交的代碼到機器本地,通過讀取用戶項目下的持續集成配置,自動化的安裝環境和依賴,編譯和測試完成后生成報告,在一段時間之后釋放虛擬機器資源。
Travel CI 開源持續集成構建項目,采用yaml格式。
Coveralls nodejs下面的代碼測試覆蓋率,原理是通過istanbul生成測試數據,上傳到coveralls網站上,然后以badge的形式展示出來
代碼風格目前比較流行js校驗工具有 JSLint、JSHint、JSCS、ESLint, 它們之前的差異比較可以參考 A Comparison of JavaScript Linting Tools,推薦使用
ESlint。
代碼風格檢查同樣也可以集成到 ci,只需要在 ci 命令前追加檢查命令即可。以 eslint 為例:
"scripts": { // .. "lint": "eslint .", "cov": "istanbul cover .", "ci": "tnpm run lint && TEST_TIMEOUT=60000 istanbul cover ." }
此時構建會先做代碼風格檢查,再做單元測試、覆蓋率統計,如代碼風格檢查失敗,會直接導致構建中斷。
流行的測試框架Jest
Facebook 出品的一個測試框架,相對其他測試框架,其一大特點就是就是內置了常用的測試工具,比如自帶斷言、測試覆蓋率工具。與React搭配更加。 (示例)
karma
一個測試集成框架,可以方便地以插件的形式集成測試框架、測試環境、覆蓋率工具等等。與Angular搭配更加。(使用 vue-cli 可以快速生成一個 Vue 項目,其中包含了 Webpack 和 Karma 以及覆蓋率統計的配置)
cucumber & cuketest
參考 一個創建 Cucumber. js 測試腳本的快速方法
其他參考資料:
前端自動化測試概覽
E2E 測試之 Cypress
使用 Jest + Enzyme 對 React 項目進行單元測試
Testing Strategies for React and Redux
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99095.html
摘要:使用可以快速生成一個項目,其中包含了和以及覆蓋率統計的配置參考一個創建測試腳本的快速方法其他參考資料前端自動化測試概覽測試之使用對項目進行單元測試 showImg(https://segmentfault.com/img/bVbjfXr?w=600&h=317); 前言 測試可以提供快速反饋,根據測試用例覆蓋代碼,從而提升代碼開發效率和質量。根據投入產出價值,通常迭代較快的業務邏輯不做...
摘要:對于每個來說,都有著內心的一種希望寫擴展的沖動了吧。然而,缺乏一個很好的切入點。生成了擴展之后,我們會看到四個文件和一個文件夾。雖然大寫的有宏定義,但是為什么會報錯,我也不太清楚了。這個宏最終會被翻譯成一個函數。 PHP 是用 C 語言寫的。對于每個 PHPer 來說,都有著內心的一種希望寫擴展的沖動了吧。然而,缺乏一個很好的切入點。Google 上搜 PHP 擴展開發,大部分都是復制...
閱讀 2310·2021-11-23 09:51
閱讀 3748·2021-11-11 10:57
閱讀 1390·2021-10-09 09:43
閱讀 2481·2021-09-29 09:35
閱讀 2013·2019-08-30 15:54
閱讀 1788·2019-08-30 15:44
閱讀 3178·2019-08-30 13:20
閱讀 1686·2019-08-30 11:19