大家好,我是Echa。
春節初五,五路财神來運财,東南西北中,财運聚你家。祝粉絲們住在黃金屋,遍種搖錢樹,盛放幸福花,結滿富貴果,處處都是聚寶盤,條條大路通财路!
迎财神,接财神,财神來了請進門。财神财神着錦衣,送大家貌美如花妻;财神财神系玉帶,願大家升職加薪快;财神手拿金元寶,保大家一生運勢高!
關于前端測試這塊,小編記得2022年11月份的時候有釋出一篇:11個值得推薦的前端性能測試工具 有興趣的小夥伴可以回頭看看,小編推薦的是絕對曬幹的幹貨,沒曬幹從來不分享出來。
今天小編繼續分享13個優秀的前端測試開源架構,希望對從事前端的程式員以及測試崗位的測試員有所幫助。在前端測試中,架構可以把測試代碼抽離出來,作為一個整體結構化地去設計測試用例,放到專門的測試檔案中,也可以實作自動運作以及顯示測試結果。
創作不易,喜歡的老鐵們加個關注,點個贊,打個賞,後面會不定期更新幹貨和技術相關的資訊,速速收藏,謝謝!你們的一個小小舉動就是對小編的認可,更是創作的動力。
小編總結前端測試通常可以分為以下三種:
- 單元測試:将代碼的各個部分分開,對軟體中的最小可測試單元進行檢查和驗證;
- 內建測試:測試多個單元能否協調工作;
- 端到端測試(E2E):從頭到尾測試整個軟體産品,以確定應用程式流按預期運作。
全文大綱
- Jest
- Mocha
- Cypress
- Storybook
- Jasmine
- React Testing Library
- Playwright
- Vitest
- AVA
- Selenium
- Puppeteer
- WebdriverIO
- TestCafe
2022 年度 StateOfJS 官方調查結果正式公布!StateOfJS 是前端生态圈中非常有影響力的且規模較大的資料調查,前端測試架構受歡迎度排行榜,總共從四個次元(滿意度、關注度、使用度、認知度)去分析,具體如下圖:
StateOfJS官方滿意度
StateOfJS官方關注度
StateOfJS使用度
Jest
官方網址:https://jestjs.io/
Github:https://github.com/facebook/jest
Jest 是一個令人愉快的 JavaScript 測試架構,專注于 簡潔明快。
Jest 是由 Facebook 開發的 JavaScript 測試架構。它是測試 React 的首選,并且得到了 React 社群的支援和開發。
Jest 具有以下特點:
- 相容性:除了可以測試 React 應用,還可以輕松內建到其他應用中,與 Angular、Node、Vue 和其他基于babel的項目相容。
- 自動模拟:當在測試檔案中導入庫時,Jest 會自動模拟這些庫以幫助我們輕松地使用它們。
- 擴充 API:Jest 提供了廣泛的 API,除非确實需要,否則不需要包含額外的庫。
- 計時器模拟:Jest 具有時間模拟系統,非常适合應用中的快進逾時,并有助于在運作測試時節省時間。
- 活躍社群:Jest 擁有很活躍的社群,可以幫助我們在需要時快速找到解決方案。
- 零配置:Jest 的目标是在大部分 JavaScript 項目上實作開箱即用, 無需配置。
- 快照:能夠輕松追蹤大型對象的測試。 快照可以與測試代碼放在一起,也可以內建進代碼 行内。
- 隔離:測試程式擁有自己獨立的程序 以最大限度地提高性能。
- 優秀的 api:從 it 到 expect - Jest 将整個工具包放在同一個 地方。好書寫、好維護、非常友善。
測試代碼:
// __tests__/sum-test.js
jest.dontMock('../sum');
describe('sum', function() {
it('adds 1 + 2 to equal 3', function() {
var sum = require('../sum');
expect(sum(1, 2)).toBe(3);
});
});
如下圖:
Mocha
官方網址:https://mochajs.org/
Github:https://github.com/mochajs/mocha
Mocha 是一個功能豐富的 JavaScript 測試架構,可以運作在 Node.js 和浏覽器中,使異步測試變得簡單有趣。Mocha 測試連續運作,允許靈活和準确的報告,同時将未捕獲的異常映射到正确的測試用例。
Mocha 不支援開箱即用的斷言、模拟等,需要通過元件/插件來添加這些功能。與 Mocha 搭配的最流行的斷言庫包括 Chai、Assert、Should.js 和 Better-assert。
Mocha 具有以下特點:
- 使用簡單:對于不包含複雜斷言或測試邏輯的較小項目,Mocha 是一個簡單的解決方案。
- ES子產品支援:Mocha 支援将測試編寫為 ES 子產品,而不僅是使用 CommonJS。
當然,Mocha 也是有缺點的:
- 設定難度大:必須使用額外的斷言庫,這确實意味着它比其他庫更難設定。
- 與插件的潛在不一緻:Mocha 将測試結構包含為 globals,不必在每個檔案中都使用 includeor 來節省時間。require 缺點是插件可能會要求無論如何都包含這些,進而導緻不一緻。
- 不支援任意轉譯器:在 v6.0.0 之前,Mocha 有一個允許使用任意轉譯器的特性,比如 coffee-script 等,但現在已經棄用。
測試代碼:
var assert = require('assert');
describe('Array', function () {
describe('#indexOf()', function () {
it('should return -1 when the value is not present', function () {
assert.equal([1, 2, 3].indexOf(4), -1);
});
});
});
如下圖:
Cypress
官方網址:https://cypress.io/
Github:https://github.com/cypress-io/cypress
Cypress 是為現代 Web 建構的下一代前端測試工具。借助 Cypress,開發人員可以編寫端到端測試、內建測試和單元測試。Cypress 完全可以在真正的浏覽器(Chrome、Firefox 和 Edge)中運作,不需要驅動程式二進制檔案。自動化代碼和應用代碼共享同一個平台,讓開發人員可以完全控制被測應用。Cypress 以其端到端測試功能而聞名,這意味着可以遵循預定義的使用者行為,并讓該工具在每次部署新代碼時報告潛在差異。
Cypress 具有以下特點:
- 端到端測試:由于 Cypress 在真實浏覽器中運作,是以可以依賴它進行端到端使用者測試。
- 時間軸快照測試:在執行時,Cypress 會拍下那一刻的快照,并允許開發人員或 QA 測試人員檢視特定步驟發生的情況。
- 穩定可靠:與其他測試架構相比,Cypress 提供了穩定可靠的測試執行結果。
- 文檔和社群:從零到運作,Cypress 包含所有必要的資訊以幫助開發人員加快速度,并且它還有一個活躍的社群。
- 速度快:Cypress 的測試執行速度很快,響應時間不短 20 毫秒。
不過,需要注意的是,Cypress 隻能在單個浏覽器中運作測試。
測試代碼:
describe('My First Test', () => {
it('Gets, types and asserts', () => {
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')
// Get an input, type into it
cy.get('.action-email').type('[email protected]')
// Verify that the value has been updated
cy.get('.action-email').should('have.value', '[email protected]')
})
})
如下圖:
Storybook
官方網址:https://storybook.js.org/
Github:https://github.com/storybookjs/storybook
Storybook與其他 JavaScript 測試架構不同,Storybook 是一個 UI 測試工具,它為測試元件提供了一個隔離的環境。Storybook 還附帶工具、Test runner 以及與更大的 JavaScript 生态系統的友善內建,以擴充 UI 測試覆寫範圍。
可以通過多種方式使用 Storybook 進行 UI 測試:
- 視覺測試:捕獲每個故事的螢幕截圖,然後将其與基線進行比較以檢測外觀和內建問題。
- 輔助功能測試:發現與視覺、聽覺、移動、認知、語言或神經障礙相關的可用性問題。
- 互動測試:通過模拟使用者行為、觸發事件并確定狀态按預期更新來驗證元件功能。
- 快照測試:檢測渲染标記中的更改以顯示表面渲染錯誤或警告。
- 将其他測試中的故事導入 QA 甚至更多 UI 特性。
測試代碼:
// stories/userStory.js
import { storiesOf } from "@storybook/react";
import { userHooks } from '../src/index'
import React from 'react';
const Demo = () => {
const result = userHooks();
return (
<div>
<p>{result}</p>
</div>
)
}
storiesOf("user", module).add('Demo', Demo);
如下圖:
Jasmine
官方網址:http://jasmine.github.io/
Github:https://github.com/jasmine/jasmine
Jasmine 是一個簡易的 JavaScript 單元測試架構,其不依賴于任何浏覽器、DOM、或者是任何 JavaScript 而存在。它适用于所有網站、Node.js 項目,或者是任何能夠在 JavaScript 上面運作的程式。Jasmine 以行為驅動開發 (BDD) 工具而聞名。BDD 涉及在編寫實際代碼之前編寫測試(與測試驅動開發 (TDD)相反)。
Jasmine 具有以下特點:
- API 簡單:它提供了簡潔且易于了解的文法,以及用于編寫單元測試的豐富而直接的 API 。
- 開箱即用:不需要額外的斷言或模拟庫,開箱即用。
- 速度快:由于不依賴任何外部庫,是以速度相對較快。
- 多語言:不僅用于編寫 JS 測試,也可以用于 Ruby(通過Jasmine-gem)或 Python(通過Jsmin-py)
當然,Jasmine 也是有有缺點的:
- 污染全局環境:預設情況下,它會建立測試全局變量(關鍵字如“describe”或“test”),是以不必在測試中導入它們。在特定情況下,這可能會成為不利因素。
- 編寫異步測試具有挑戰性:使用 Jasmine 測試異步函數比較困難。
測試代碼:
describe("A suite is just a function", function() {
let a;
it("and so is a spec", function() {
a = true;
expect(a).toBe(true);
});
});
如下圖:
React Testing Library
官方網址:https://testing-library.com/react
Github:https://github.com/testing-library/react-testing-library
React Testing Library 基于 DOM Testing Library 的基礎上添加一些 API,主要用于測試 React 元件。該庫在使用過程并不關注元件的内部實作,而是更關注測試。該庫基于 react-dom 和 react-dom/test-utils,是以上兩者的輕量實作。
React Testing Library 不像 Jest 那樣是一個 Test runner。事實上,它們可以協同工作。React Testing Library 是一組工具和功能,可幫助通路 DOM 并對其執行操作,即将元件渲染到虛拟 DOM 中,搜尋并與之互動。
React Testing Library 具有以下特點:
- React 官方推薦:可以在 React 的官方文檔中找到使用此庫的參考和建議。
- 尺寸小:它是專門為測試 React 應用/元件而編寫的。
測試代碼:
__tests__/fetch.test.jsx
import React from 'react'
import {rest} from 'msw'
import {setupServer} from 'msw/node'
import {render, fireEvent, waitFor, screen} from '@testing-library/react'
import '@testing-library/jest-dom'
import Fetch from '../fetch'
const server = setupServer(
rest.get('/greeting', (req, res, ctx) => {
return res(ctx.json({greeting: 'hello there'}))
}),
)
beforeAll(() => server.listen())
afterEach(() => server.resetHandlers())
afterAll(() => server.close())
test('loads and displays greeting', async () => {
render(<Fetch url="/greeting" />)
fireEvent.click(screen.getByText('Load Greeting'))
await waitFor(() => screen.getByRole('heading'))
expect(screen.getByRole('heading')).toHaveTextContent('hello there')
expect(screen.getByRole('button')).toBeDisabled()
})
test('handles server error', async () => {
server.use(
rest.get('/greeting', (req, res, ctx) => {
return res(ctx.status(500))
}),
)
render(<Fetch url="/greeting" />)
fireEvent.click(screen.getByText('Load Greeting'))
await waitFor(() => screen.getByRole('alert'))
expect(screen.getByRole('alert')).toHaveTextContent('Oops, failed to fetch!')
expect(screen.getByRole('button')).not.toBeDisabled()
})
如下圖:
Playwright
官方網址:https://playwright.dev/
Github: https://github.com/microsoft/playwright
Playwright 是一個用于端到端測試的自動化架構。該架構由 Microsoft 建構和維護,旨在跨主要浏覽器引擎(Chromium、Webkit 和 Firefox)運作。它實際上是早期 Puppeteer 項目的一個分支。主要差別在于,Playwright 是專門為開發人員和測試人員進行 E2E 測試而編寫的。Playwright 還可以與主要的 CI/CD 伺服器一起使用,如 TravisCI、CircleCI、Jenkins、Appveyor、GitHub Actions 等。
Playwright 具有以下特點:
- 多語言:Playwright 支援 JavaScript、Java、Python 和 .NET C# 等多種語言;
- 多個 Test Runner 支援:可以被 Mocha、Jest 和 Jasmine 使用;
- 跨浏覽器:該架構的主要目标是支援所有主流浏覽器。
- 模拟和原生事件支援:可以模拟移動裝置、地理位置和權限,還支援利用滑鼠和鍵盤的原生輸入事件。
當然,Playwright 也有一些缺點:
- 仍處于早期階段:相當較新,社群支援有限;
- 不支援真實裝置:不支援用于移動浏覽器測試的真實裝置,但支援模拟器。
測試代碼:
import { test, expect } from '@playwright/test';
test('my test', async ({ page }) => {
await page.goto('https://playwright.dev/');
// Expect a title "to contain" a substring.
await expect(page).toHaveTitle(/Playwright/);
// Expect an attribute "to be strictly equal" to the value.
await expect(page.locator('text=Get Started').first()).toHaveAttribute('href', '/docs/intro');
await page.click('text=Get Started');
// Expect some text to be visible on the page.
await expect(page.locator('text=Introduction').first()).toBeVisible();
});
如下圖:
Vitest
官方網址:https://vitest.dev/
Github: https://github.com/avajs/ava
Vitest 是一個由 Vite 提供支援的極速單元測試架構。其和 Vite 的配置、轉換器、解析器和插件保持一緻、開箱即用的 TypeScript / JSX 支援、支援 Smart 和 instant watch 模式,如同用于測試的 HMR、内置 Tinyspy 用于模拟、打标和監察等。Vitest 非常關心性能,使用 Worker 線程盡可能并行運作,帶來更好的開發者體驗。
Vitest 具有以下特點:
- Vite 支援:重複使用 Vite 的配置、轉換器、解析器和插件,在應用和測試中保持一緻。
- 相容 Jest:擁有預期、快照、覆寫等 - 從 Jest 遷移很簡單。
- 智能即時浏覽模式:智能檔案監聽模式,就像是測試的 HMR。
- ESM, TypeScript, JSX:由 esbuild 提供的開箱即用 ESM、TypeScript 和 JSX 支援。
- 源内測試:提供了一種在源代碼中運作測試以及實作的方法,類似于 Rust 的子產品測試。
不過,Vitest 仍處于早期階段(最新版本為 0.28.1)。盡管 Vitest 背後的團隊在建立此工具方面做了大量工作,但它還很年輕,社群支援可能還不是很完善。
測試代碼:
import { assert, describe, it } from 'vitest'
// Only this suite (and others marked with only) are run
describe.only('suite', () => {
it('test', () => {
assert.equal(Math.sqrt(4), 3)
})
})
describe('another suite', () => {
it('skipped test', () => {
// Test skipped, as tests are running in Only mode
assert.equal(Math.sqrt(4), 3)
})
it.only('test', () => {
// Only this test (and others marked with only) are run
assert.equal(Math.sqrt(4), 2)
})
})
如下圖:
AVA
Github: https://github.com/avajs/ava
AVA 是一個極簡的 Test Runner,它利用 JavaScript 的異步特性并同時運作測試,進而提高性能。AVA 不會為建立任何 Globals,是以可以更輕松地控制使用的内容。這可以使測試更加清晰,確定确切知道發生了什麼。
AVA 具有以下特點:
- 同時運作測試:利用 JavaScript 的異步特性使得測試變得簡單,最小化部署之間的等待時間;
- 簡單的 API:通過了一個簡單的 API,僅提供需要的内容;
- 快照測試:通過 jest-snapshot 提供,當想知道應用的 UI 何時意外更改時,這非常有用;
- Tap 格式報告:Ava 預設顯示可讀的報告,也可以獲得 TAP 格式的報告。
當然,AVA 也有一些缺點:
- 沒有測試分組:Ava 無法将相似的測試組合在一起。
- 沒有内置的模拟:Ava 未附帶模拟,不過可以使用第三方庫(如Sinon.js)。
測試代碼:
import test from 'ava';
test('foo', t => {
t.pass();
});
test('bar', async t => {
const bar = Promise.resolve('bar');
t.is(await bar, 'bar');
});
如下圖:
Selenium
官方網址:https://www.selenium.dev/
Github: https://github.com/seleniumhq/selenium
Selenium是一個用于Web應用程式測試的工具。Selenium測試直接運作在浏覽器中,就像真正的使用者在操作一樣。支援的浏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。這個工具的主要功能包括:測試與浏覽器的相容性——測試應用程式看是否能夠很好得工作在不同浏覽器和作業系統之上。測試系統功能——建立回歸測試檢驗軟體功能和使用者需求。支援自動錄制動作和自動生成.Net、Java、Perl等不同語言的測試腳本。
功能
- 架構底層使用JavaScript模拟真實使用者對浏覽器進行操作。測試腳本執行時,浏覽器自動按照腳本代碼做出點選,輸入,打開,驗證等操作,就像真實使用者所做的一樣,從終端使用者的角度測試應用程式。
- 使浏覽器相容性測試自動化成為可能,盡管在不同的浏覽器上依然有細微的差别。
- 使用簡單,可使用Java,Python等多種語言編寫用例腳本。
優勢
據Selenium首頁所說,與其他測試工具相比,使用Selenium的最大好處是:
Selenium測試直接在浏覽器中運作,就像真實使用者所做的一樣。Selenium測試可以在Windows、Linux和Macintosh上的Internet Explorer、Chrome和Firefox中運作。其他測試工具都不能覆寫如此多的平台。使用Selenium和在浏覽器中運作測試還有很多其他好處。
Selenium完全開源,對商業使用者也沒有任何限制,支援分布式,擁有成熟的社群與學習文檔
下面是主要的幾大好處:
通過編寫模仿使用者操作的Selenium測試腳本,可以從終端使用者的角度來測試應用程式。通過在不同浏覽器中運作測試,更容易發現浏覽器的不相容性。Selenium的核心,也稱browser bot,是用JavaScript編寫的。這使得測試腳本可以在受支援的浏覽器中運作。browser bot負責執行從測試腳本接收到的指令,測試腳本要麼是用HTML的表布局編寫的,要麼是使用一種受支援的程式設計語言編寫的。
測試代碼:
如下圖:
Puppeteer
官方網址:https://pptr.dev/
Github: https://github.com/puppeteer/puppeteer
Puppeteer 是一個控制 headless Chrome 的 Node.js API 。它是一個 Node.js 庫,通過 DevTools 協定提供了一個進階的 API 來控制 headless Chrome。它還可以配置為使用完整的(非 headless)Chrome。
在浏覽器中手動完成的大多數事情都可以通過使用 Puppeteer 完成,下面是一些入門的例子:
- 生成螢幕截圖和 PDF 頁面
- 檢索 SPA 并生成預渲染内容(即 “SSR”)
- 從網站上爬取内容
- 自動送出表單,UI 測試,鍵盤輸入等
- 建立一個最新的自動測試環境。使用最新的 JavaScript 和浏覽器功能,在最新版本的 Chrome 中直接運作測試
- 捕獲網站的時間線跟蹤,以幫助診斷性能問題
測試代碼:
import puppeteer from 'puppeteer';
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://developer.chrome.com/');
// Set screen size
await page.setViewport({width: 1080, height: 1024});
// Type into search box
await page.type('.search-box__input', 'automate beyond recorder');
// Wait and click on first result
const searchResultSelector = '.search-box__link';
await page.waitForSelector(searchResultSelector);
await page.click(searchResultSelector);
// Localte the full title with a unique string
const textSelector = await page.waitForSelector(
'text/Customize and automate'
);
const fullTitle = await textSelector.evaluate(el => el.textContent);
// Print the full title
console.log('The title of this blog post is "%s".', fullTitle);
await browser.close();
})();
如下圖:
WebdriverIO
官方網址:https://webdriver.io/
Github: https://github.com/webdriverio/webdriverio
WebdriverIO是一個基于節點的浏覽器和自動化測試架構。js。在WebDrivero中添加助手函數在WebDrivero中很簡單。此外,它還可以在WebDriver協定和Chrome Devtools協定上運作,這使得它對于基于Selenium WebDriver的跨浏覽器都非常有效 testing或者基于鉻的自動化。最重要的是,由于WebDriverIO是開源的,您可以獲得一系列插件來滿足您的自動化需求。
專門為前端開發者們:可擴充-添加助手函數或更複雜的集合以及現有指令的組合非常簡單,非常有用。
相容-WebdriverIO可以在WebDriver協定上運作,以進行真正的跨浏覽器測試,也可以在Chrome DevTools協定上使用Puppeter進行基于Chromium的自動化。
功能豐富-各種内置和社群插件允許您輕松內建和擴充設定以滿足您的需求。
您可以使用WebdriverIO自動化:
用React、Vue、Angular、Svelte或其他前端架構編寫的現代web應用程式
在模拟器/模拟器或真實裝置上運作的混合或本地移動應用程式
本機桌面應用程式(例如用Electron.js編寫)
浏覽器中web元件的單元或元件測試
測試代碼:
import { $, expect } from '@wdio/globals'
import { render } from '@testing-library/vue'
import HelloWorld from '../../src/components/HelloWorld.vue'
describe('Vue Component Testing', () => {
it('increments value on click', async () => {
const { getByText } = render(HelloWorld)
const btn = getByText('count is 0')
// transform into WebdriverIO element
const button = await $(btn)
await button.click()
await button.click()
getByText('count is 2')
await expect($('button=count is 2')).toExist()
})
})
如下圖:
TestCafe
官方網址:https://testcafe.io/
Github:https://github.com/DevExpress/testcafe
TestCafe 是一個用于測試 Web 應用程式的純 Node.js 端到端解決方案。 它負責所有階段:啟動浏覽器,運作測試,收集測試結果和生成報告。 TestCafe 不需要浏覽器插件,它在所有流行的現代浏覽器開箱即用。
前面小編介紹了很多測試架構工具,為什麼還要介紹TestCafe呢?因為TestCafe支援的浏覽器更多,且也内置自動等待機制,穩定性上面相較與webdriver有很大提高。下面列舉了TestCafe在穩定性、測試資料管理、配置資訊管理以及支援的web應用操作場景等方面的支援程度。另外,TestCafe還支援并發執行,即可以同時開啟多個浏覽器運作多個測試案例,縮短測試回報時間,這是前面兩個架構都不具備的。故如果被測應用需要支援IE、safari這些浏覽器,testcafe是個不錯的選擇。
除上面已支援的功能外,testcafe還計劃支援。
Testing in Multiple Browser Windows,即開啟多個tab頁,在多個tab頁上執行一個完整的自動化測試。 --計劃支援,并已進入開發階段。
架構自身支援接口調用。 --計劃支援,暫未進入開發階段。
Selector Debug Panel,UI測試大部分調試場景都是定位和操作頁面元素,Selector Debug Panel可極大的提升調試效率。 --計劃支援,并已進入開發階段。
測試代碼:
const createTestCase = require('testcafe');
const fs = require('fs');
let testcafe = null;
createTestCase('localhost', 1337, 1338)
.then(tc => {
testcafe = tc;
const runner = testcafe.createRunner();
const stream = fs.createWriteStream('report.json');
return runner
// 需要運作的cases
.src(
[
'../demo/podemo/*.js',
'../demo/setWindowsSize.js'
]
)
// 設定需要執行的浏覽器
.browsers([
'chrome',
'firefox'
])
// 錯誤自動截圖
.screenshots(
// 儲存路徑
'../error/',
true,
// 儲存路勁格式
'${DATE}_${TIME}/test-${TEST_INDEX}/${USERAGENT}/${FILE_INDEX}.png'
)
// 生成report格式,根據需要安裝對應report子產品,
// 詳細看:http://devexpress.github.io/testcafe/documentation/using-testcafe/common-concepts/reporters.html
.reporter('json', stream)
// 并發
.concurrency(3)
.run({
skipJsErrors: true, // 頁面js錯誤是否忽略,建議為true
quarantineMode: true, // 隔離模式,可以了解為失敗重跑
selectorTimeout: 15000, // 設定頁面元素查找逾時時間,智能等待
assertionTimeout: 7000, // 設定斷言逾時時間
pageLoadTimeout: 30000, // 設定頁面加載逾時時間
debugOnFail: true, // 失敗開啟調試模式 腳本編寫建議開啟
speed: 1 // 執行速度0.01 - 1
});
}).then(failedCount => {
console.error('Failed Count:' + failedCount);
testcafe.close();
})
.catch(err => {
console.error(err);
});
如下圖:
最後感謝
- 感謝StateOfJS 團隊一直為開發者提供精準前沿技術的排名統計,讓更多的開發者有了研究新技術的學習方向和動力
- 感謝位元組跳動的今日頭條技術團隊,為我們提供這麼好的大平台,讓小編和粉絲們相遇,共同探讨技術,共同學習,共同成長,共同進步。