成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

FE.TEST-前端測試初探

Travis / 1458人閱讀

摘要:使用可以快速生成一個項目,其中包含了和以及覆蓋率統(tǒng)計的配置參考一個創(chuàng)建測試腳本的快速方法其他參考資料前端自動化測試概覽測試之使用對項目進行單元測試

前言

測試可以提供快速反饋,根據(jù)測試用例覆蓋代碼,從而提升代碼開發(fā)效率和質(zhì)量。根據(jù)投入產(chǎn)出價值,通常迭代較快的業(yè)務(wù)邏輯不做測試用例,對通用常用的代碼基本組件或框架需要編寫測試。

在 2018 年年初對測試工具的整體回顧:
An Overview of JavaScript Testing in 2018

測試與開發(fā) TDD 測試驅(qū)動開發(fā)

測試驅(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測試自動化框架,參考官方代碼示例

性能測試 Performance Testing

jsPerf
benchmark.js

持續(xù)集成 Continuous Integration

持續(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

相關(guān)文章

  • FE.TEST-前端測試初探

    摘要:使用可以快速生成一個項目,其中包含了和以及覆蓋率統(tǒng)計的配置參考一個創(chuàng)建測試腳本的快速方法其他參考資料前端自動化測試概覽測試之使用對項目進行單元測試 showImg(https://segmentfault.com/img/bVbjfXr?w=600&h=317); 前言 測試可以提供快速反饋,根據(jù)測試用例覆蓋代碼,從而提升代碼開發(fā)效率和質(zhì)量。根據(jù)投入產(chǎn)出價值,通常迭代較快的業(yè)務(wù)邏輯不做...

    張率功 評論0 收藏0
  • 前端單元測試初探

    摘要:本文只討論單測的范疇,對集成測試有興趣的話,可以看下的集成測試代碼。前端單測現(xiàn)狀測試本質(zhì)上就是假定一個輸入,然后判斷得到預期的輸出。 原文發(fā)于我的博客:https://github.com/hwen/blogS... 要不要寫單測? 關(guān)于這個 cnode 上就有個很有意思的討論 做個調(diào)查,你的 Node 應(yīng)用有寫單測嗎? 看完這個應(yīng)該會有結(jié)論?如果沒有,就回帖跟別人探討下~ 測試 測試...

    isLishude 評論0 收藏0
  • 從零開始寫 PHP 擴展(一)

    摘要:對于每個來說,都有著內(nèi)心的一種希望寫擴展的沖動了吧。然而,缺乏一個很好的切入點。生成了擴展之后,我們會看到四個文件和一個文件夾。雖然大寫的有宏定義,但是為什么會報錯,我也不太清楚了。這個宏最終會被翻譯成一個函數(shù)。 PHP 是用 C 語言寫的。對于每個 PHPer 來說,都有著內(nèi)心的一種希望寫擴展的沖動了吧。然而,缺乏一個很好的切入點。Google 上搜 PHP 擴展開發(fā),大部分都是復制...

    shiina 評論0 收藏0
  • jsPerf初探

    摘要:在前端開發(fā)中,解決一個問題常常有多鐘方案可以實施。然而那種方案是最佳的。是一個解決方案對比,性能比較的平臺。進入官網(wǎng)后,出現(xiàn)是一個表單,每個表單的作用如下用戶信息測試用列信息其中選項表示是否立即發(fā)布。準備工作測試用列的代碼片段分析 在前端開發(fā)中,解決一個問題常常有多鐘方案可以實施。然而那種方案是最佳的。這就是為什么使用jsPerf的原因了。 jsPerf是一個解決方案對比,性能比較的平...

    wenyiweb 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<