Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Taste Cucumber.js - JavaScript BDD Framework
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yuren Ju
July 21, 2017
Technology
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Taste Cucumber.js - JavaScript BDD Framework
Yuren Ju
July 21, 2017
More Decks by Yuren Ju
See All by Yuren Ju
Code For America 見聞錄 - 社會安全網
yurenju
0
250
Impossible Election for recall in Taiwan
yurenju
1
530
物資管理系統與災民證
yurenju
0
1.1k
JavaScript 開發流程自動化懶人包
yurenju
38
6.1k
Code Coverage -- Javascript Frontend + Backend
yurenju
14
8.1k
Loopback + Angular.js
yurenju
3
620
bifrost 物資管理系統
yurenju
4
330
Gaia Build System introduction
yurenju
2
220
Open Data Initiatives for Taiwan
yurenju
0
380
Other Decks in Technology
See All in Technology
AI、CDK と協働する Full TypeScript アプリケーション開発 / Full TypeScript Application with AI and CDK
geekplus_tech
2
250
壊して学ぶAWS CDK: そのcdk deployで消えるもの、残るもの
k_adachi_01
1
270
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
2
160
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
280
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
260
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
3
260
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
4.7k
Amazon EVS で VCF 9.0 / 9.1 のサポート開始まとめ
mtoyoda
0
300
CDKで書くECSのベストプラクティス、 改めて考え直す2026 #cdkconf2026
makies
1
570
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
3.1k
なぜ私たちのSREプラクティスはなかなか機能しないのか 〜システムより先に組織を見る〜 / Why our SRE practices aren't really working
vtryo
3
3.8k
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
230
Featured
See All Featured
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
260
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Amusing Abliteration
ianozsvald
1
230
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Building Adaptive Systems
keathley
44
3.1k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
510
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Six Lessons from altMBA
skipperchong
29
4.3k
Transcript
Cucumber.js 實踐 BDD 經驗分享 Yuren Ju 小黃瓜
https://creativecommons.org/licenses/by/4.0/
Yuren Ju • g0v contributor ◦ 勞基法修法計算機 ◦ 勞基法函式庫 ◦
勞工權益網站 ◦ 割闌尾 ◦ Bifrost 物資管理系統 • COSCUP 議程組長、紀錄組長 • JavaScript Developer
我想開發勞基法函式庫! 讓往後跟勞基法相關的專案,都可以直接使用函式庫來完成跟法律相關的部分
如何開始? • 要找人幫忙,我有認識一些熟悉勞基法的朋友! • 但... 函式庫 (library) 跟一般軟體不同,一般使用者不容易了解 • 或許我們先作一版有介面的軟體,再讓這些朋友幫忙找出問題點?
「勞工權益」網站
缺點 • 有介面的軟體引用了勞基法函 式庫,等於說是間接關係 • 有許多功能沒辦法透過軟體表 達 • 發現嚴重錯誤後,函式庫的 API
要跟著修改 • 改完之後裡面的邏輯可能會像 義大利麵一樣。 Mason eating spaghetti, cc-nc-nd
None
工程師與其他專業領 域的人,有沒有辦法 在更早的時候就開始 溝通? cc-by-nc https://flic.kr/p/36iL52
BDD Behavior-driven development
流程 撰寫規格 撰寫自動化測試 撰寫程式
來做個擲骰子的網站吧
需要什麼功能? 擲骰子?
None
功能: 擲骰子 場景: 擲一顆骰子 當按下 ”擲” 按鈕 那麼骰子會顯示 1 -
6 之間的點數 場景: 擲兩顆骰子 當改變骰子數量變成 2 時 而且按下 ”擲” 按鈕 那麼總共會出現 2 顆骰子 而且骰子會顯示 1 - 6 之間的點數 而且會出現所有骰子點數的加總
規格 成品 ?
自動化測試 vue-sample> npm test
撰寫自動化測試 撰寫程式 撰寫自動化測試 撰寫程式
撰寫自動化測試 撰寫程式 TDD, Test-Driven Development
Write test before implementation
Write test before implementation
Write test before implementation Method chaining
TDD 優點 • 提早了解如何程式會如何被使用 • 釐清模組的介面 • 每次循環後可以基於現有的測試重構 • 工程師之間更容易的在還沒寫程式之前就可以討論如何定義介面
Top Five Benefits of Test Driven Development (TDD)
撰寫自動化測試 撰寫程式 自動化測試會作為撰寫程式的「輸入」 撰寫程式時可以藉由跑測試來了解目前現有程式通過了多少測試
撰寫規格 撰寫自動化測試 撰寫程式 規格卻沒辦法成為自動化測試的「輸入」 需要經由人閱讀規格轉換成自動化測試
撰寫規格 撰寫自動化測試 撰寫程式
BDD Behavior-driven development
BDD - Behavior-driven development 兩大重點: 1. 用通用語言敘述行為作為規格 2. 用 (1)
產生的規格作為自動化測試的基礎 http://www.infoq.com/cn/news/2015/02/introducing-bdd
流程 撰寫規格 撰寫自動化測試 撰寫程式 撰寫規格 撰寫自動化測試 撰寫程式
功能: 擲骰子 場景: 擲一顆骰子 當按下 ”擲” 按鈕 那麼骰子會顯示 1 -
6 之間的點數 場景: 擲兩顆骰子 當改變骰子數量變成 2 時 而且按下 ”擲” 按鈕 那麼總共會出現 2 顆骰子 而且骰子會顯示 1 - 6 之間的點數 而且會出現所有骰子點數的加總
Gherkin 醃黃瓜
Gherkin • Feature • Scenario • Given, When, Then, And,
But • Reference • 功能 • 場景 • 假如、當、那麼、而且、但是 • 所有中文語法
一個可以讓工程師、PM、QA 等等角 色一同探索、討論軟體的規格,並且 以所有人都可以理解的語言撰寫規 格。
撰寫規格 產生空的測試步驟 填入實際的測試步驟 執行 cucumber 撰寫規格 撰寫自動化測試
None
test step 1 test step 2 test step 3 test
step 4 test step 5
None
Gherkin Gherkin is plain-text English (or one of 60+ other
languages) with a little extra structure.
用製作骰子網站來體驗 BDD 吧 https://github.com/yurenju/dice
步驟 • Setup project • Write spec • Setup test
environment • Write test • Implement dice website
• npm run dev • npm test http://localhost:3000/
步驟 • Setup project • Write spec • Setup test
environment • Write test • Implement dice website
source
npm test
None
步驟 • Setup project • Write spec • Setup test
environment • Write test • Implement dice website
Selenium Browsers Website
var webdriver = require('selenium-webdriver'), var driver = new webdriver.Builder() .forBrowser('firefox')
.build(); driver.get('http://www.google.com/ncr'); driver.findElement(By.name('q')).sendKeys('webdriver'); driver.findElement(By.name('btnG')).click(); driver.wait(until.titleIs('webdriver - Google Search'), 1000); driver.quit(); selenium-webdriver https://seleniumhq.github.io/selenium/docs/api/javascript/index.html
Nightwatch.js
• world.js ◦ 每個情境的初始設定 ◦ 把 browser 初始設定放在這 • hook.js
◦ 設定每個情境 before / after 的操作 ◦ 把打開網站寫在 before() ◦ 把關閉瀏覽器寫在 after() • dice.js ◦ 空的測試步驟
features/support/world.js
features/support/hooks.js
features/step_definitions/dice.js
步驟 • Setup project • Write spec • Setup test
environment • Write test • Implement dice website
None
None
None
By module doc
None
test step 1 test step 2 test step 3 test
step 4 test step 5
None
None
None
None
None
npm test
None
步驟 • Setup project • Write spec • Setup test
environment • Write test • Implement dice website
None
Step 1 • add “actions” section • add “dice-group” section
• add “result” section
Step 2 • Write JavaScript ◦ declare DOM element ◦
declare mapping for dice (unicode mapping) ◦ declare function for throw dice ◦ bind click event and give an initial state
npm test
None
撰寫規格 撰寫自動化測試 撰寫程式 撰寫規格 撰寫自動化測試 撰寫程式
撰寫規格 撰寫自動化測試 撰寫程式 避免 較多
None
BDD wikipedia 上的第二段 BDD的重點是通過與利益相關者的討論取得對預期的軟體行為的 清醒認識。它通過用自然語言書寫非程式設計師可讀的測試用例擴 展了測試驅動開發方法。行為驅動開發人員使用混合了領域中統一 的語言的母語語言來描述他們的代碼的目的。這讓開發者得以把精 力集中在代碼應該怎麼寫,而不是技術細節上,而且也最大程度的 減少了將代碼編寫者的技術語言與商業客戶、用戶、利益相關者、 專案管理者等的領域語言之間來回翻譯的代價。
使用在勞基法函式庫前期討論 • 所有的參與者可以一起討論 ◦ 不需要技術背景 • 在還沒撰寫程式前可以進行討論,確認測試案例的正確性 ◦ 減低成本 •
討論的時候甚至不需要 github ◦ 用協作文件工具如 hackmd, dropbox paper, google docs 進行協同討論
勞基法函式庫 https://hackmd.io/c/SJES19Fy-/ github commits, 黑客松成果報告
我的專案應該採用 BDD 嗎?
Bonus https://github.com/yurenju/laborrights/compare/bugfix-demo?expand=1