摘要:使用可以快速生成一個項目,其中包含了和以及覆蓋率統(tǒng)計的配置參考一個創(chuàng)建測試腳本的快速方法其他參考資料前端自動化測試概覽測試之使用對項目進行單元測試
前言
測試可以提供快速反饋,根據(jù)測試用例覆蓋代碼,從而提升代碼開發(fā)效率和質(zhì)量。根據(jù)投入產(chǎn)出價值,通常迭代較快的業(yè)務(wù)邏輯不做測試用例,對通用常用的代碼基本組件或框架需要編寫測試。
在 2018 年年初對測試工具的整體回顧:
An Overview of JavaScript Testing in 2018
測試驅(qū)動開發(fā)的基本思想就是在開發(fā)功能代碼之前,先編寫測試代碼。也就是說在明確要開發(fā)某個功能后,首先思考如何對這個功能進行測試,并完成測試代碼的編寫,然后編寫相關(guān)的代碼滿足這些測試用例。然后循環(huán)進行添加其他功能,直到完全部功能的開發(fā)。(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 行為驅(qū)動開發(fā)
Behavior Driven Development,行為驅(qū)動開發(fā)是一種敏捷軟件開發(fā)的技術(shù),它鼓勵軟件項目中的開發(fā)者、QA和非技術(shù)人員或商業(yè)參與者之間的協(xié)作。
與一般的自動化測試(如單元測試、服務(wù)測試、UI 測試)不一樣的是,BDD 是由多方參與的測試開發(fā)方式。如在使用 Protractor 寫 Angular 的 E2E 測試的時候,所以的測試都是前端測試人員編寫的。BDD 最重要的一個特性是:由非開發(fā)人員編寫測試用例,而這些測試用例是使用自然語言編寫的 DSL(領(lǐng)域特定語言)。換多話來說,業(yè)務(wù)人員、測試人員、客戶等利益相關(guān)者,以習慣的方式編寫相關(guān)的測試用例,再由開發(fā)人員去實現(xiàn)相關(guān)的測試。
(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);模擬響應(yīng)數(shù)據(jù)
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 在瀏覽器中邊預覽執(zhí)行可視化測試用例,像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
持續(xù)集成是一種非常優(yōu)秀的多人開發(fā)實踐,通過代碼push觸發(fā)鉤子,實現(xiàn)自動運行編譯、測試等工作。接入持續(xù)集成后,我們的每一次push代碼,每個Merge Request都會生成對應(yīng)的測試結(jié)果,項目的其他成員可以很清楚地了解到新代碼是否影響了現(xiàn)有的功能,在接入自動告警后,可以在代碼提交階段就快速發(fā)現(xiàn)錯誤,提升開發(fā)迭代效率。
持續(xù)集成會在每次集成時提供一個幾乎空白的虛擬機器,并拷貝用戶提交的代碼到機器本地,通過讀取用戶項目下的持續(xù)集成配置,自動化的安裝環(huán)境和依賴,編譯和測試完成后生成報告,在一段時間之后釋放虛擬機器資源。
Travel CI 開源持續(xù)集成構(gòu)建項目,采用yaml格式。
Coveralls nodejs下面的代碼測試覆蓋率,原理是通過istanbul生成測試數(shù)據(jù),上傳到coveralls網(wǎng)站上,然后以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 ." }
此時構(gòu)建會先做代碼風格檢查,再做單元測試、覆蓋率統(tǒng)計,如代碼風格檢查失敗,會直接導致構(gòu)建中斷。
流行的測試框架Jest
Facebook 出品的一個測試框架,相對其他測試框架,其一大特點就是就是內(nèi)置了常用的測試工具,比如自帶斷言、測試覆蓋率工具。與React搭配更加。 (示例)
karma
一個測試集成框架,可以方便地以插件的形式集成測試框架、測試環(huán)境、覆蓋率工具等等。與Angular搭配更加。(使用 vue-cli 可以快速生成一個 Vue 項目,其中包含了 Webpack 和 Karma 以及覆蓋率統(tǒng)計的配置)
cucumber & cuketest
參考 一個創(chuàng)建 Cucumber. js 測試腳本的快速方法
其他參考資料:
前端自動化測試概覽
E2E 測試之 Cypress
使用 Jest + Enzyme 對 React 項目進行單元測試
Testing Strategies for React and Redux
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/99095.html
摘要:使用可以快速生成一個項目,其中包含了和以及覆蓋率統(tǒng)計的配置參考一個創(chuàng)建測試腳本的快速方法其他參考資料前端自動化測試概覽測試之使用對項目進行單元測試 showImg(https://segmentfault.com/img/bVbjfXr?w=600&h=317); 前言 測試可以提供快速反饋,根據(jù)測試用例覆蓋代碼,從而提升代碼開發(fā)效率和質(zhì)量。根據(jù)投入產(chǎn)出價值,通常迭代較快的業(yè)務(wù)邏輯不做...
摘要:對于每個來說,都有著內(nèi)心的一種希望寫擴展的沖動了吧。然而,缺乏一個很好的切入點。生成了擴展之后,我們會看到四個文件和一個文件夾。雖然大寫的有宏定義,但是為什么會報錯,我也不太清楚了。這個宏最終會被翻譯成一個函數(shù)。 PHP 是用 C 語言寫的。對于每個 PHPer 來說,都有著內(nèi)心的一種希望寫擴展的沖動了吧。然而,缺乏一個很好的切入點。Google 上搜 PHP 擴展開發(fā),大部分都是復制...
閱讀 2332·2021-11-23 09:51
閱讀 3764·2021-11-11 10:57
閱讀 1410·2021-10-09 09:43
閱讀 2498·2021-09-29 09:35
閱讀 2028·2019-08-30 15:54
閱讀 1798·2019-08-30 15:44
閱讀 3194·2019-08-30 13:20
閱讀 1702·2019-08-30 11:19