dtinth
dtinth
  • 36
  • 275 855
แนะนำ Vitest และเทคนิค Snapshot Testing สำหรับทดสอบโค้ด TypeScript (ในร้านก๋วยเตี๋ยว)
สัปดาห์ที่แล้วผมไปกินก๋วยเตี๋ยวกับอาร์มี่ คุยกันเรื่อง software engineering และ testing
อาร์มี่แชร์เทคนิคการทดสอบโค้ดของเขา เขาใช้วิธีเขียน logic สำคัญๆ ที่ซับซ้อนบางส่วน ให้มันอยู่ได้ด้วยตัวมันเองเลย (นั่นคือ โค้ดต่างๆ จบในตัวมันเอง ไม่มีการเรียกใช้งาน dependency หรือการเรียกใช้ฟังก์ชั่นภายนอกเลย หรือที่เรียกกันว่าเป็น “pure function”) โดยเขียนพอ logic อยู่ในนั้นหมดแล้ว เวลาที่จะ test ก็แค่ copy code ของฟังก์ชั่นนี้ไป ใส่ใน console ของ browser แล้วลองทดสอบเคสต่างๆ ดูว่าผลลัพธ์มันถูกต้องหรือเปล่า
ผมให้ความเห็นว่ามาถูกทางแล้ว การ isolate โค้ดออกมาเพื่อให้เทสต์ได้ง่าย ช่วยให้เรามี testable code ขณะเดียวกันก็มีเครื่องมือและวิธีในการทดสอบโค้ด JavaScript/TypeScript ที่สะดวกกว่านี้ ก็เลยเกิดเป็นคอนเทนต์นี้ครับบ คลิปนี้ผมอาจจะพูดไม่ค่อยชัดเพราะมีก๋วยเตี๋ยวในปาก 😅
และผมก็แนะนำหนังสือ “Software Engineering at Google” ให้ลองไปอ่านดู เป็นหนังสืออ่านฟรีที่ถอดบทเรียนว่า software engineer ที่ Google ทำงานกันยังไง ในนั้นมีหลายเรื่องที่น่าสนใจมาก (ทั้งเรื่องที่เป็น soft skill และ technical skill ด้วย) ในเล่มนั้นมีประมาณ 4 บทที่เกี่ยวกับเรื่อง testing ซึ่งผมได้แรงบันดาลใจมาจากเล่มนั้นเยอะเหมือนกันครับบ
Source code ฟังก์ชัน htmlToText
github.com/dtinth/e-reader-dashboard/blob/main/src/htmlToText.ts
โปรเจค Elysia by Example
dtinth.github.io/elysia-by-example/
หนังสือ Software Engineering at Google
abseil.io/resources/swe-book
Guest: Army
codegeassmasterzeronebreakoutr1r2.codes
00:00 | แนะนำโปรเจคตัวอย่าง: เว็บสำหรับอ่านบทความที่บันทึกใน Hoarder ผ่าน e-reader และฟังก์ชันอ่านออกเสียง
01:06 | ฟังก์ชันที่ต้องการทดสอบ: htmlToText สำหรับแปลง HTML เป็นข้อความธรรมดา
01:27 | ความเหนื่อยในการเทสต์ฟังก์ชันในช่วงแรกๆ และวิธีแก้ปัญหาแบบลูกทุ่งๆ
03:25 | htmlToText มี dependency เยอะ จึงไม่สามารถก๊อบโค้ดไปรันทดสอบใน browser console ได้
03:36 | แก้ปัญหาด้วยการใช้ Vitest และการติดตั้ง Vitest
04:54 | เขียน test case แรกด้วย expect().toEqual()
05:37 | ข้อดีของการเก็บ test case ในไฟล์: ไม่หายเหมือนใน console
05:54 | htmlToText เป็น pure function: input/output ต้องสัมพันธ์กัน
06:12 | การทำ snapshot testing เพื่อ maintain input และ output
06:26 | snapshot testing คืออะไร และการใช้ .toMatchInlineSnapshot()
08:00 | การ update snapshot
09:31 | ตัวอย่างการใช้ snapshot testing เพื่อช่วยหาบั๊กในโปรเจค Elysia.js
10:47 | พบ bug ใหม่จาก side effect ของการแก้ bug เก่า
11:24 | snapshot testing ช่วยให้เจอ bug ที่ซ่อนอยู่
12:17 | ข้อดีของ snapshot testing: ไม่ต้อง maintain output เอง
12:27 | คำถาม: ข้อเสียของการใช้ snapshot testing มีอะไรบ้าง
12:39 | ตัวอย่างเมื่อเพิ่ม feature แล้วเทสต์พัง ทั้งๆ ที่ไม่มีบั๊ก เพราะผลลัพธ์เปลี่ยน
13:19 | การใช้ toEqual() และ objectContaining() แทน snapshot testing
15:05 | ตัวอย่างการใช้ toContain() และการ sort ก่อน match snapshot
15:48 | สรุป snapshot testing ไม่ละเอียด แต่ตรวจการเปลี่ยนแปลงได้ดี
16:45 | Vitest เครื่องมือเขียน test ง่าย zero configuration
16:54 | snapshot testing ช่วยป้องกันการเปลี่ยนแปลงที่ไม่คาดคิด
17:06 | snapshot testing มีใน Jest ด้วย
17:26 | ทำไมถึงแนะนำ Vitest: zero configuration
17:59 | จบคอนเทนต์
Переглядів: 1 092

Відео

กลยุทธ์การพัฒนาซอฟต์แวร์ให้ทดสอบได้ง่ายขึ้น | Strategies for black-box testability
Переглядів 3,8 тис.Місяць тому
หัวข้อบรรยายในงาน National Coding Day 2024 ◻️ สรุปโดย AI สำหรับทีมพัฒนาที่กำลังสร้างแอปพลิเคชันและมองหาแนวทางการทำ automated test หรือกำลังหาวิธีให้ developer กับ tester ทำงานร่วมกันได้อย่างมีประสิทธิภาพมากขึ้น ใน session นี้ ไท Software Engineer จาก EVP Corporation จะมาแบ่งปันกลยุทธ์และเทคนิคต่างๆ ที่ Eventpop ใช้ในการทำ automated test สำหรับ web app ในระดับ end-to-end โดยเน้นที่การสร้างระบบที...
เสียงภาษาไทยของโมเดล Gemini 2.0 Flash Experimental
Переглядів 343Місяць тому
เมื่อไม่กี่ชั่วโมงที่ผ่านมา (11 ธันวาคม 2024 เวลาสี่ทุ่มครึ่ง) Google ประกาศเปิดตัวโมเดล AI ใหม่ (Gemini 2.0) และเปิดให้นักพัฒนาลองเล่นกับโมเดล Gemini 2.0 Flash Experimental ความสามารถใหม่ของโมเดลนี้คือ สามารถเอาต์พุตภาพและเสียงได้แบบเนทีฟ (หมายความว่า สามารถทำได้ด้วยตัวมันเอง โดยไม่ต้องพึ่งโมเดลอื่น) โดยตัวโมเดลนี้สามารถพูดได้หลายๆ ภาษาด้วยโมเดลเดียวเลย เลยลองจับมันมาพูดภาษาไทยดู~ 0:00 | Puck ...
แนะนำกิจกรรม Advent of Code 🎄 ฝึกฝีมือการเขียนโค้ด และสาธิตการแก้โจทย์ด้วยภาษา Ruby 💎 (ในฟู้ดคอร์ด)
Переглядів 3,1 тис.Місяць тому
วันก่อนไปกินข้าวกับมีนา บวกกับช่วงนี้เข้าเดือนธันวาคมพอดี ซึ่งทุกๆ ปี จะมีกิจกรรม Advent of Code เป็นกิจกรรมโค้ดดิ้งสนุกๆ ประจำปีช่วงเทศกาลคริสต์มาส ที่มีโจทย์ปัญหาให้แก้กันวันละ 2 ข้อ ตั้งแต่วันที่ 1 ถึง 25 ธันวาคม เหมาะสำหรับการฝึกฝนทักษะและฝีมือในการเขียนโปรแกรม เลยทำคอนเทนต์แนะนำกิจกรรมกันดู Advent of Code: adventofcode.com/ 00:00 | แนะนำ Advent of Code กิจกรรมแก้โจทย์โปรแกรมมิ่งประจำปีช่วง...
โจทย์เกมการแข่งขันเขียนโค้ดควบคุม Chrome 🤖 เฉลยโดยที่ 1 ของแต่ละข้อ | Browser automation challenges
Переглядів 84 тис.2 місяці тому
สัปดาห์ก่อน ผมจัดอีเวนต์นึงที่มีชื่อว่า Browser automation challenges ครับ ในงานนี้จะมีภารกิจต่างๆ ให้ทำ เป็นภารกิจที่อยู่ในรูปแบบของหน้าเว็บซึ่งมนุษย์ธรรมดาทั่วไปเนี่ย อาจจะไม่สามารถทำภารกิจนี้ได้สำเร็จ ก็จะต้องเขียนโค้ดมาควบคุมเว็บบราวเซอร์เพื่อทำงานแทนเรา เพื่อที่จะแก้ปัญหาให้สำเร็จครับ โดยในงานมีโจทย์ 8 ข้อ, เวลา 2 ชั่วโมง, มีผู้เข้าแข่งขัน 10 ทีม หลังจากที่หมดเวลาเราก็รวบรวมคะแนนทั้งหมดแล้...
ตัวอย่างโจทย์ภายในงาน Browser automation challenges
Переглядів 1,8 тис.2 місяці тому
วันพุธที่ 20 พฤศจิกายน 2024 นี้ จะมีอีเวนท์ Browser automation challenges เป็นกิจกรรมแลกเปลี่ยนประสบการณ์และเรียนรู้ทักษะ browser automation ผ่านการแข่งขันแก้โจทย์สุดหิน ดูรายละเอียดงานได้ที่ www.eventpop.me/s/browser-automation-challenges ทดลองแก้โจทย์ทดสอบได้ที่ browser-automation-challenges-demo.netlify.app/ ติดตามชมได้ทางเพจ creatorsgarten www.youtube.com/@creatorsgarten
เซสชั่นจับฉ่าย 2024 (ที่งาน JavaScript Bangkok 2.0.0) (speaker's POV)
Переглядів 6 тис.3 місяці тому
หัวข้อนำเสนอในอีเวนท์ JavaScript Bangkok 2.0.0 ครั้งนี้ มีหลายเรื่องมากที่ผมอยากเล่า เลยเอาเรื่องต่างๆ ที่ได้เรียนรู้ปีนี้ มามัดรวมกันเป็นเซสชั่นนี้ครับ ◻️ สรุปโดย AI ไท ปังสกุลยานนท์ จาก Eventpop และคอมมูนิตี้ Creatorsgarten มาแชร์ประสบการณ์และเครื่องมือที่ใช้เพื่อสร้าง workflow ให้ชีวิตง่ายขึ้นในปีนี้ โดยเน้นไปที่โปรเจ็คสร้างเว็บไซต์ Creatorsgarten.org และการทำ subtitle ให้อัตโนมัติ ไทจะพาไปส...
Dynamic programming in a nutshell - the key that helped me grok the concept
Переглядів 17 тис.4 місяці тому
“Dynamic programming คือ recursive cache” นี่คือคอนเซปต์ที่ปลดล็อกความเข้าใจของผมเรื่อง dynamic programming ในระดับที่สามารถแก้โจทย์ dynamic programming ส่วนใหญ่ได้ (แต่พบว่าไม่ค่อยมีใครสอนแนวคิดนี้กัน ทำให้ dynamic programming กลายเป็นเรื่องเข้าใจยากเกินความจำเป็น) วันนี้ผมกินข้าวกับอาร์มี่และพอร์ช คุยกันเรื่องว่าการเข้าใจ data structure มีผลต่อการทำงานเป็นโปรแกรมเมอร์ขนาดไหน การทำโจทย์ LeetCo...
I teach Web Audio API and Music Theory to a friend… in a karaoke
Переглядів 2,7 тис.6 місяців тому
วันก่อน ระหว่างที่เพื่อนๆ ร้องคาราโอเกะกัน @heypoom บอกว่าอยากรู้เรื่อง Web Audio ว่าบนเว็บเราเล่นกับเสียงยังไงได้บ้าง อยากได้ crash course เลยเกิดเป็นเซสชั่นนี้ เหตุการณ์เกิดขึ้นในงาน The Stipud Honkathack in Thailand Dan of Smile ครั้งที่ 8 00:00 | สร้าง AudioContext 00:10 | สร้างคลื่นเสียงด้วย oscillator 00:56 | การเล่นโน้ตด้วย oscillator 01:47 | เลือกรูปแบบคลื่นเสียง (sine/square/triangle/s...
5000 VS Code themes set to a chill lo-fi beat (4K)
Переглядів 3 тис.Рік тому
This video shows 5,000 VS Code themes inside a VS Code Theme Tester. Rendered at 4K resolution at 60fps (2160p60). Did you find any new favorites from this video? Share them in the comments! Lofi background music from MusicByAI: ua-cam.com/video/bdoHcW4n6-k/v-deo.html #4k60fps #vscode #visualization I wanted to try making a video that showcases thousands of @code themes and put a nice backgroun...
Manage YouTube videos using Git? | GitOps in weird places
Переглядів 1,2 тис.Рік тому
GitOps เป็นหลักการและแนวคิดแบบนึงสำหรับการดูแลจัดการระบบซอฟต์แวร์ หรืออีกชื่อนึงคือ “operations by pull request” ปกติมักนำมาใช้กับการดูแลพวก cloud infrastructure และ Kubernetes cluster… แต่นอกจากสองอย่างนี้แล้ว เราสามารถนำไอเดีย GitOps มาประยุกต์ใช้เพื่อดูและอะไรอย่างอื่นได้อีกบ้าง? เอามาใช้ดูแลช่องใน UA-cam ได้ไหม? หรือเซิฟเวอร์ Discord ล่ะ? มาดูกันว่าไอเดีย GitOps นำไปใช้ที่ไหนได้บ้าง 00:00 |...
The mathematics behind a 3D QR code explosion effect
Переглядів 3,2 тис.Рік тому
สมัยเรียนมัธยม-ปีหนึ่ง ผมไม่ตั้งใจเรียนวิชาเลข แต่ต่อมาก็มีโปรเจคนึงที่คณิตศาสตร์ได้นำกลับมาใช้เต็มๆ และก็รู้สึกว่าถ้าเมื่อก่อนเราตั้งใจศึกษาคณิตศาสตร์กว่านี้มันก็น่าจะง่ายขึ้น เลยจะมาเล่าเรื่องเกี่ยวกับโปรเจคนั้นครับ หัวข้อนี้ไปพูดที่งาน National Coding Day 2023 วันที่ 19 กุมภาพันธ์ 2023 ที่ BITEC Bangna Reference ต่างๆ อยู่ที่ลิงค์นี้ครับ - dt.in.th/go/3dqr #creativecoding #maths #canvas #webgl
The Amazing Flexibility of the Web MIDI API and its Surrounding Ecosystem
Переглядів 5902 роки тому
This is the original prerecorded footage of my talk that I presented at CityJS Singapore 2022. After this video, there’s was also a short live demo at the conference. The recording on CityJS’s channel - ua-cam.com/video/En5F2nC7-W0/v-deo.html Special thanks to On for supporting me throughout the process of preparing for this talk. WebMIDICon: github.com/dtinth/WebMIDICon Original talk descripti...
Using an AI to generate English subtitles using OpenAI Whisper
Переглядів 1,8 тис.2 роки тому
ใครที่เคยทำซับไตเติลภาษาอังกฤษจะรู้ว่ามันเหนื่อยขนาดไหน แต่พอมี OpenAI Whisper มันช่วยให้ประหยัดเวลาได้เยอะมากๆ ในคลิปนี้จะสาธิตวิธีใช้ให้ดูครับ whisper-youtube github.com/ArthurFDLR/whisper-youtube 0:00 | Intro 0:08 | OpenAI Whisper 0:28 | whisper-youtube 0:39 | เปิด Google Colab 1:24 | ตั้งค่าต่างๆ 2:14 | รันโมเดล 2:25 | ดาวน์โหลดไฟล์ซับไตเติล 2:36 | อัพโหลดซับไตเติลขึ้น UA-cam 2:42 | Outro
อธิบาย Base64 + ลองแก้โจทย์ #LMWNMysteriousCode ด้วยมือ
Переглядів 3,3 тис.2 роки тому
0:00 | Intro 0:23 | Base64 คืออะไร 3:30 | การเข้ารหัส Base64 4:27 | ถอดรหัสด้วยมือ 8:42 | ถอดรหัสด้วยโค้ด
npm package party game
Переглядів 7822 роки тому
npm package party game
Code in the Wind #1 Example Challenges
Переглядів 6592 роки тому
Code in the Wind #1 Example Challenges
Let’s build a personal assistant bot and level up your coding skills!
Переглядів 2,6 тис.2 роки тому
Let’s build a personal assistant bot and level up your coding skills!
แปลงภาษาไทยเป็นโค้ดด้วย OpenAI Codex
Переглядів 1,8 тис.3 роки тому
แปลงภาษาไทยเป็นโค้ดด้วย OpenAI Codex
misheard | โปรแกรมแชทหัวร้อน
Переглядів 9453 роки тому
misheard | โปรแกรมแชทหัวร้อน
Jenkins CI 2.289.2 automated smoke tests
Переглядів 2 тис.3 роки тому
Jenkins CI 2.289.2 automated smoke tests
VSCode 1.57.1 automated smoke tests and integration tests
Переглядів 1,1 тис.3 роки тому
VSCode 1.57.1 automated smoke tests and integration tests
รีวิว+ทดสอบความสามารถภาษาไทยของ GitHub Copilot Technical Preview
Переглядів 40 тис.3 роки тому
รีวิว ทดสอบความสามารถภาษาไทยของ GitHub Copilot Technical Preview
Insertion Sort Song
Переглядів 4,2 тис.3 роки тому
Insertion Sort Song
Analyzing my code in KhongPangKhongKwan’s ComSci The Series Ep12 [TH/EN sub]
Переглядів 8 тис.3 роки тому
Analyzing my code in KhongPangKhongKwan’s ComSci The Series Ep12 [TH/EN sub]
Merge Sort Song
Переглядів 4,8 тис.3 роки тому
Merge Sort Song
Bubble Sort Song
Переглядів 2,1 тис.3 роки тому
Bubble Sort Song
How does Vim compare to a modern text editor such as VS Code? (Response to DistroTube’s Vim video)
Переглядів 49 тис.4 роки тому
How does Vim compare to a modern text editor such as VS Code? (Response to DistroTube’s Vim video)
Embracing gradual typing | Strategies for adopting TypeScript into a large project [TH/EN sub]
Переглядів 1,4 тис.4 роки тому
Embracing gradual typing | Strategies for adopting TypeScript into a large project [TH/EN sub]
pastebox
Переглядів 6044 роки тому
pastebox

КОМЕНТАРІ

  • @Jakjakwc
    @Jakjakwc 12 днів тому

    เขียนโค๊ดไม่เป็น แต่ฟังแล้วสนุกมากครับ

  • @pink8527
    @pink8527 16 днів тому

    สอนที่ไหนอยากเรียน

  • @ake.minimaltech
    @ake.minimaltech 16 днів тому

    ชอบเลย

  • @tomhoma
    @tomhoma 18 днів тому

    ขอบคุณครับ

  • @raka898
    @raka898 23 дні тому

    ฟังไป 9 นาที แตก

  • @user-cy3zd2im5f
    @user-cy3zd2im5f 24 дні тому

    มัน challenges ตรงไหน งง ฉิบหาย ให้ ai เขียนให้ 5 นาที ก็ได้แล้วนะ นี้มันยุค ai แล้ว

    • @008นนทกร
      @008นนทกร 10 днів тому

      แล้วถ้าให้​ AI เขียนให้แล้วมันจะเป็น​ challenge ตรงไหนหรอครับ​ เขาตั้งโจทย์​มาให้แก้ปัญหาด้วยมนุษย์​ไม่ใช่​ AI ครับ​

    • @user-cy3zd2im5f
      @user-cy3zd2im5f 10 днів тому

      @@008นนทกร ก็แก้ปัญหาด้วย AI สิครับ AI มันก็คือการเขียนโปรแกรม อีกแบบหนึ่ง ต่างอะไร จาก มนุษย์เขียนล่ะครับ ตามโลกให้ทันด้วย นะ คิดว่าใช้ AI ช่วยแล้วจะแก้ ปัญหาได้ไหม ด้วยนะ ไม่ใช้ รู้จักแต่ชื่อ AI แต่ใช้ไม่เป็นก็เป็น ง่อย เหมือนเดิมนะ

  • @Rox-yc7ft
    @Rox-yc7ft Місяць тому

    เอามาแก้โจทย์การเขียน EA ได้ไหมครับ ถ้ามีช่องยูทูป ที่เค้าทำไว้สำเร็จแล้ว เราจะแก้ว่าเค้าใช้หลักการอะไรในการทำกำไร ซึ่งได้แต่ละเดือนเยอะมากๆ

  • @ooocokeooo
    @ooocokeooo Місяць тому

    ข้อ calendar โคตรโรคจิต 555

  • @KarunJaraslertsuwan
    @KarunJaraslertsuwan Місяць тому

    รบกวนถามเพิ่มเติมครับ 1. แปลว่าเวลาเราสร้าง api อะไรซักอย่างขึ้นมา มันอาจจะไม่ได้มี CURD ครบ แต่ถ้าเราจะต้องมี เส้นสำหรับ senario test เราก็ต้องมีเพิ่ม code สำหรับรองรับส่วนนี้เพิ่มเติมถูกต้องไหมครับ ? 2. ตอนออกแบบ trigger api อันนี้คือ ต้องออกแบบยังไงอ่ะครับ หรือว่ารอให้เจอ event นั้นๆก่อนค่อยมาออกแบบว่าจะให้มันทำงานยังไง ? อยากรู้ว่าตอนเริ่มต้นทำพวกนี้คือ คิดแบบไหนหรือว่าตัว framework เองมัน provide สิ่งนี้มาให้เลยครับ

    • @dtinth
      @dtinth Місяць тому

      ขอบคุณสำหรับคำถามครับบ 1. ใช่ครับ เมื่อเราสร้าง API หรือ feature ใดๆ ขึ้นมา หากต้องการให้มีเส้นทางสำหรับ scenario test เราก็ต้องเพิ่มโค้ดเพื่อรองรับส่วนนี้เพิ่มเติมครับ ผมมองว่า developer และ tester ก็เป็น user ของแอปเหมือนกัน ดังนั้นระบบควรมีวิธีให้ผู้ที่เกี่ยวข้องสามารถตรวจสอบความถูกต้องของการทำงานได้ โดยไม่ต้องเข้าไปดู implementation details ข้างในเอง หากมีสิทธิ์ก็ควรจะสามารถตรวจสอบได้เลย ตอนออกแบบก็จะพยายามคำนึงถึง developer และ tester เพื่อให้มี tools สำหรับทั้งสองกลุ่มนี้ในการใช้งานและตรวจสอบระบบครับ 2. สำหรับ Trigger API เราไม่ได้ออกแบบไว้ตั้งแต่แรกครับ แต่เราได้ไอเดียมาจากการที่เราต้อง implement test สำหรับเคสที่มีเหตุการณ์เฉพาะเจาะจงเกิดขึ้น (อย่างเช่นการจองที่นั่งชนกัน) เราจึงรอให้เจอ event นั้นๆ ก่อน แล้วค่อยมาออกแบบว่าจะให้มันทำงานอย่างไรครับ จากที่เล่าในคลิป (ประมาณนาทีที่ 25) ตอนแรกเราเคยลองทำเป็น API สำหรับสร้างของแต่ละชนิด แต่ก็พบปัญหาต่างๆ เลยรื้อมาทำเป็น Scenario+Trigger API แทนครับ ซึ่งตัว framework ไม่ได้ provide สิ่งนี้มาให้ เราต้องสร้างขึ้นมากันเองครับ เทคนิคพวกนี้คือเกิดจากการลองผิดลองถูกมาสองสามรอบครับบ

    • @KarunJaraslertsuwan
      @KarunJaraslertsuwan Місяць тому

      @@dtinth รบกวนถามเพิ่มเติมสมมติว่า ใน scenario นั้นต้องมี user ซึ่งเราใช้ user จาก 3rd party อย่างนี้เราจะกำหนดยังไงอ่ะครับ ? เช่น สมมติเราใช้ supabase แล้วเราต้องเรียกพวก user หรือข้อมูลคต่างๆจาก library อ่ะครับ จังหวะทำ scenario เราจะแบบสมมติมันขึ้นเหมือนเหมือนทำพวก unit test ไหมอ่ะครับ ?

    • @dtinth
      @dtinth Місяць тому

      @@KarunJaraslertsuwan อันนี้ขึ้นอยู่กับว่าเรามองว่าข้อมูลนั้นอยู่ในระบบเราไหมครับ เช่น ・ แบบที่ 1 - แอพใช้ Supabase เก็บ user แต่ DB ของ Supabase ไม่ได้แชร์กับแอปอื่น - เราอาจจะมองว่า Supabase เป็นส่วนนึงของ app เราด้วย ดังนั้นก็อาจจะทำให้ตอน set up scenario ไปสมัคร user ใน Supabase ใหม่ให้ด้วย (e.g. โดยใช้ Supabase Auth Admin) ・ แบบที่ 2 - Supabase มองเป็น 3rd party ไม่ถือเป็นส่วนหนึ่งของแอพ - เคสนี้ปกติผมจะสร้าง test double ขึ้นมาครับ แต่กรณีของ Supabase ก็อาจจะง่ายกว่าหน่อย เพราะเราสามารถเอา Supabase มารันบน local environment ระหว่าง test ได้ เหลือแค่ชี้ให้แอพไปคุยกับ Supabase ตัว test instance แทน แล้วก็เขียน test script ให้ใช้ Auth Admin API เพื่อสร้าง user ในฝั่ง Supabase ก่อนที่จะมาสร้าง scenario ภายในระบบครับ

    • @KarunJaraslertsuwan
      @KarunJaraslertsuwan 23 дні тому

      @@dtinth อยากให้มี vdo สอนเกี่ยวการ set up เป็นแบบ curd project เล็กๆ พอเป็นไปได้ไหมครับ พอดีลองฟังแล้วเข้าใจ concept แต่ตอนจะ implement มันเหมือนไม่รู้จะไปเริ่มอะไรยังไงดี แบบตอนแรกไม่มี scenario api เราเขียน test ตั้งแต่ unit, integration ก่อนไหมครับ แล้วค่อยไปเริ่ม test ตัวนี้

  • @ฟังเพลง-ต3ง
    @ฟังเพลง-ต3ง Місяць тому

    มีคอร์สสอนมั้ยครับสายนี้

  • @sunitisukontaprapun8200
    @sunitisukontaprapun8200 Місяць тому

    โหดมากครับแต่ละคน😂

  • @19feb15
    @19feb15 Місяць тому

    อยากเห็นพี่ใช้ python บ้างอะ 55(อยากรู้เทคนิคภาษานี้เยอะๆ)(พี่สอนง่ายเข้าใจง่ายมากครับขอบคุณครับ)

  • @CanangaOdorata-i1z
    @CanangaOdorata-i1z Місяць тому

    อยากได้ทริคว่าไปเรียนรู้มาจากไหน หรือคิดเองได้ทั้งหมดเลยโดยสัญชาติญาณเลย หรือมี midset แบบไหน comunity ที่เลือกเป็นแนวไหน

  • @xbiohazardx7312
    @xbiohazardx7312 Місяць тому

    ขอบคุณครับ

  • @ER-sv1np
    @ER-sv1np Місяць тому

    - การ test สำคัญมาก dev เขา test กันยังไงนะ 1:25 งานอดิเรก 4:39 สร้าง black box ขึ้นมา test ปรับปรุง code แยก 5:08 ทำ software ให้ง่ายต่อการ test 5:08 เจอ bug ให้เขียน test ครอบไว้ก่อน เพื่อจะไม่เกิด bug ที่เดิมซ้ำ 7:30 loop การทำงาน ( test ช้าเลยซ้ำบ่อยไม่ได้)

  • @yoyoparn
    @yoyoparn Місяць тому

    Content ดีมากเลยครับๆ

  • @Talokaaa
    @Talokaaa Місяць тому

    ชอบไอเดียมาก แต่คิดออกมาเป็นโค้ดยากมากเหมือนกัน พอมีเป็น github ให้เห็นตัวอย่าง coding pattern หน่อยไหมครับ

    • @dtinth
      @dtinth Місяць тому

      ตอนนี้ยังไม่มีครับ แต่ถ้ามีเมื่อไหร่เดี๋ยวไว้จะมาอัพเดตนะครับบ (แต่น่าจะยังไม่ใช่เร็วๆ นี้ ;-;) แต่เบื้องต้น คิดว่าเริ่มจากทำ API ง่ายๆ ของแต่ละ scenario ก่อนได้ครับ เช่น POST /api/tester/scenarios/FooScenario POST /api/tester/scenarios/BarScenario พอจำนวน scenario เริ่มเยอะขึ้น ก็จะเริ่มเห็นโค้ดที่มันซ้ำๆ กัน ซึ่งโค้ดพวกนี้เราสามารถแยกออกมาเป็น utility module ได้ครับ แล้วหลังจากนั้นก็จะเริ่มเห็นว่ามันมีโค้ดที่เป็น boilerplate เยอะขึ้น ซึ่งถึงจุดนั้นก็อาจจะแยกออกมาเป็นสร้างเป็น library หรือ internal framework ต่อได้ครับ (ซึ่งตรงจุดนี้ท่าที่ทำได้จะขึ้นอยู่กับภาษาและ base framework ที่ใช้ครับ)

  • @FozeNFloweR
    @FozeNFloweR Місяць тому

    เหลือแค่ใสวีดีโอละ

  • @nutttytube
    @nutttytube Місяць тому

    ขยายความ trigger API หน่อยได้มั้ยคับ 28:28 ทำไม เบืองหลัง trigger API มันทำอะไร บ้าง trigger id 234 มันไป เลือก event เดียว + ที่นั่งเดียวกับ test script ที่กำลังเขียนได้ไง

    • @dtinth
      @dtinth Місяць тому

      ขอบคุณสำหรับคำถามครับ - ตอนที่เรียก scenario setup API เราจะสร้าง trigger ไว้ในระบบครับ (ก็คือเก็บเป็น row ใน database ไว้เลย) ว่าให้ trigger id นี้ให้ทำอะไรบ้าง ตัวอย่างเช่น { id: 234, action: "mark_seat_as_sold", parameters: { seat_ids: [789] } } ทีนี้ตอนเราไปเรียก `POST /api/tester/triggers/789` ตัว endpoint มันจะไปโหลด row นั้นออกมาจาก database แล้วดำเนินการตาม action และ parameters ที่กำหนดไว้เลยครับ แปลว่าทุกครั้งที่เรา setup scenario ก็จะได้ trigger id ใหม่ ที่สัมพันธ์กับ scenario นั้นๆ ที่ถูกสร้างขึ้นมาครับ

    • @nutttytube
      @nutttytube Місяць тому

      ขอบคุณคับ พอดี ไม่เห็น scenario API มันพ่น เลขที่นั่ง ออกมา เลยสงสัย test script มันรู้ได้ไง ว่า จะ เขียน จอง ซื้อที่นั่งไหน ให้ชน กัน สงสัยอาจจะใช้ เส้นอื่นดู อีกที รบกวนถามเพิ่มเติม test script ที่ใช้ scenario API ไม่ควร เอาไป ใช้ ทำ cicd ใช่มั้ย เพราะ เหมือนมันข้ามบางส่วน ไปใช้หลังบ้าน cicd ควรมีหน้าบ้านเพียวๆ พวกนี้ ใช้ตอน tester เทส manual แล้วขี้เกียจ จิ้มหน้าจอซ้ำ ผมเข้าใจถูกปล่าว

    • @dtinth
      @dtinth Місяць тому

      ขอบคุณสำหรับคำถามเพิ่มเติมครับ ・ เรื่องการชนกันของการจองที่นั่ง - เราออกแบบ scenario ไว้สำหรับแต่ละ test case โดยเฉพาะครับ เช่น OrderSeatingScenario เราจะ fix ข้อมูลทั้งหมดไว้เลยว่าจะมีกี่โซน กี่ที่นั่ง มีบัตรกี่รูปแบบ รวมถึงที่นั่งไหนจะถูกซื้อตัดหน้าเมื่อเรียกใช้งานตัว trigger (ซึ่งในเคสนี้ เรา hardcode ไว้ว่า ที่นั่งแรกสุดของโซนแรกสุดจะถูกซื้อตัดหน้า) ทำให้โค้ดฝั่ง test สามารถเลือกที่นั่งนั้นได้เลย โดยไม่ต้องใช้ API อื่นเพื่อดูว่าจะจองที่นั่งไหนให้ชนกัน เพราะมันถูกกำหนดไว้แล้วในตัว scenario ครับ ・ เรื่องการใช้งาน scenario API ใน CI/CD - scenario API ไม่ได้มีไว้แค่สำหรับ tester ที่ขี้เกียจจิ้มหน้าจอ แต่เราใช้ใน CI/CD ด้วยครับ คือการสร้าง event ผ่าน UI ทุกครั้งในแต่ละ test case จะใช้เวลานานมากใน CI/CD เราจึงใช้ Scenario API เพื่อสร้างสถานการณ์ที่ต้องการได้รวดเร็ว โดยถึงแม้ scenario API จะข้ามขั้นตอนการสร้าง event ผ่าน UI ไป แต่เราก็มี test อื่นๆ ที่ครอบคลุมขั้นตอนการสร้าง event ผ่าน UI จริงๆ ด้วย เพื่อให้มั่นใจว่าทุกอย่างทำงานถูกต้องครับ

    • @nutttytube
      @nutttytube Місяць тому

      ถามอีกนิดคับ test script ui ที่กำลังเขียน มันใช่ event 664 เหมือน ที่มันเกิด ตอนเราไปเอา trigger มาหรือปล่าว 234 มันทำหน้าที่ เลือกที่นั่ง ของ event 664 ใช่มั้ยคับ ถ้าใช่ ที่นั่งมันไม่ได้ โดนเลือก ตอนเรารัน scenario API แล้วหรือคับ

    • @dtinth
      @dtinth Місяць тому

      ​@@nutttytube ใช่ครับ trigger 234 ทำหน้าที่เลือกที่นั่ง ของ event 664 - แต่ทุกครั้งที่รัน test script ตัว script มันจะไปยิง scenario API ใหม่ตลอดครับ หมายความว่า ทุกครั้งท่ีรันเทสต์ ระบบจะสร้าง event ใหม่ พร้อมกับ trigger ใหม่ ให้สำหรับการรันเทสต์ครั้งนั้นโดยเฉพาะครับ (ตัวอย่างเช่น ก็จะได้ trigger 240 เลือกที่นั่งของ event 665)

  • @MrFlook-bc9fq
    @MrFlook-bc9fq Місяць тому

    เนื้อหาดีมากครับพี่

  • @nwatth
    @nwatth Місяць тому

    scenario ตรง 21:50 นี่ใช้ gem อะไรเหรอครับ หรือเขียนขึ้นมาเอง ขอบคุณครับ

    • @dtinth
      @dtinth Місяць тому

      ไม่ได้ใช้ gem อะไรเป็นพิเศษครับ อันนี้เราเขียนใช้กันเองครับบ

  • @ralilili9798
    @ralilili9798 Місяць тому

    เนื้อหาดีมากๆครับ

  • @mindlosteiei-kk5fd
    @mindlosteiei-kk5fd Місяць тому

    ฟังแล้วให้ฟีลแบบพี่สอนน้องมากครับเข้าใจง่ายมาก❤❤

  • @LikeVerBateTV
    @LikeVerBateTV Місяць тому

    สุดยอดมากคับพี่ fc เลย นั่งฟังจนจบ เข้าใจเลยยย อยากสอบถามพี่ไท หน่อยครับว่า ทุกวันนี้พี่ยังใช้ vim อยุ่มั้ยครับ ได้แรงบันดาลใจเรียน vim มาจากพี่ คลิปเก่าๆเลยครับ

    • @dtinth
      @dtinth Місяць тому

      ใช้อยู่ครับบ เวลา ssh หรือเวลาใช้งานบนมือถือ ใช้ Vim เป็น ช่วยได้มากฮะ Advent of Code ปีนี้ หลังๆ ผมลองกลับมาเล่นผ่าน Vim (kickstart.nvim) และ Zellij ครับ - Kickstart.nvim - ua-cam.com/video/m8C0Cq9Uv9o/v-deo.html - Zellij - manual.omakub.org/1/read/15/terminal ผมเคยทำคลิปเทียบ VScode กับ Vim อยู่ (ภาษาอังกฤษ) แต่โดยรวม คิดว่าถ้าศึกษาแล้วมันใช้สะดวกทั้งคู่ ลองดูได้ครับ ua-cam.com/video/8EKK7b5h7XE/v-deo.html

  • @ihavecutestsmileonmyface
    @ihavecutestsmileonmyface Місяць тому

    โคตรโหดเลยครับพี่ไทย

  • @vimhadsad12day
    @vimhadsad12day Місяць тому

    มีอะไรทำเวลาว่างละ

    • @Winny_moshi
      @Winny_moshi Місяць тому

      พี่ครับ ถ้าจะเริ่ม เขียนโปรแกรม เริ่มจาก ภาษาไหนดี อ่ะ

  • @BEERsval
    @BEERsval Місяць тому

    อึ้ย ผมไปอยู่ไหนมา ช่องนี้ดีจัง

  • @โปรแกรมเมอร์คนหนึ่ง

    วนมาอีกปีแล้วสินะ คลิปแรกทำให้ผมรู้จักพี่ก็คือเป็นคลิปที่อยู่ในช่อง gu code นั่นแหละ event นี้

  • @mewxz029
    @mewxz029 Місяць тому

    พึ่งรู้ว่า ruby เจ๋งขนาดนี้ 🙏

  • @kelvingoh4720
    @kelvingoh4720 2 місяці тому

    ขอบคุณครับ นอกจากจะได้ดูเฉลย ผมนี่พึ่งรู้จัก keyboard layout manoonchai ด้วย ต้องลองไปละครับ อ่านดูในเว็บเห็นว่าดีมาก

  • @prayoots
    @prayoots 2 місяці тому

    เยี่ยมๆ ครับ รัฐควรส่งเสริม แนวนี้ อย่างแรง นะคร้าบบ

  • @AravenDev
    @AravenDev 2 місяці тому

    xpath ดีจ๊าดดดด (ทุกทีมเก่งหมดเลยครับ)

  • @dashjung
    @dashjung 2 місяці тому

    ชอบพี่กอฟ apipal ตั้งแต่กำกับก็มาดิวะ แล้วค่ะ

  • @meenkaza
    @meenkaza 2 місяці тому

    ดีคับ

  • @Firstblooddd
    @Firstblooddd 2 місяці тому

    FCทีมหมูเด้งง้าบบบ⭐️👏🏼✨

  • @thotchs4116
    @thotchs4116 2 місяці тому

    ว้าวววววว

  • @kumfiless5815
    @kumfiless5815 2 місяці тому

    ผ่านมาเจอครับ แบบนี้เป็นพื้นฐานของการทำโปรแกรมช่วยเล่นเกม(บอท)เลยใช่มั้ยครับ

    • @nuthodxd1226
      @nuthodxd1226 2 місяці тому

      มี keyword ในการเรียนเรื่องพวกนี้ไหมครับ

    • @unteejo3678
      @unteejo3678 Місяць тому

      Keywords: - Browser automation - Automated testing - Web scraping - Playwright - Puppeteer - Selenium - Cypress

    • @unteejo3678
      @unteejo3678 Місяць тому

      น่าจะพื้นฐานการทำบอทกดซื้อของ กดจองตั๋วคอนเสิร์ตมากกว่าฮะ 😅

    • @gubot-allnew
      @gubot-allnew Місяць тому

      ใช่เลยแหละ

    • @kumfiless5815
      @kumfiless5815 Місяць тому

      @@unteejo3678 ขอบคุณมากครับผม

  • @plecoe
    @plecoe 2 місяці тому

    Great!!

  • @phiraphats
    @phiraphats 2 місяці тому

    อยากเล่นด้วยจังครับ

  • @pmeepiean2794
    @pmeepiean2794 2 місяці тому

    ใช้ Ai assitant อะไรหรอครับ

  • @robotcanfly4864
    @robotcanfly4864 2 місяці тому

    เขาเขียนโค้ด js ให้ไปควบคุมchrome ได้อย่างไงครับ

    • @unteejo3678
      @unteejo3678 Місяць тому

      มีตัวช่วยอยู่ครับ เช่น Playwright เป็นต้น หลักๆ ก็กด F12 ใน Chrome เพื่อส่องโค้ด HTML คร่าวๆ ด้วยตนเองก่อน แล้วลองดูว่าจะใช้ Playwright มาช่วยอย่างไรได้บ้าง ประมาณนี้ฮะ

  • @punsiriboonyakiat5771
    @punsiriboonyakiat5771 2 місяці тому

    เก่งมากๆๆๆๆ ไอดอลค่า

  • @kitti.crafts
    @kitti.crafts 2 місяці тому

    สนุกม๊ากกกก

  • @ake.minimaltech
    @ake.minimaltech 2 місяці тому

    วันจัดงานตามผ่าน Live สนุกมากแต่ไม่ได้ดูจนจบ เอามาทำคลิปดีมากครับผม ชอบๆ

  • @SuphachaiMuangsong
    @SuphachaiMuangsong 2 місяці тому

    ดีมากครับ ได้มุมมอง ขอบคุณครับ

  • @devMasterSomeday
    @devMasterSomeday 2 місяці тому

    Material UI! 🤣

  • @yokeTH
    @yokeTH 2 місяці тому

    ทีม xpath ครับ ของดีจริง ไปใช้กันครับ

  • @tub_watch-v9s
    @tub_watch-v9s 2 місяці тому

    46:40 อธิบายเข้าใจง่ายมากๆๆๆครับ คารวะ

  • @keythooboiz8357
    @keythooboiz8357 2 місяці тому

    ดีมากเลยครับ

  • @dtinth
    @dtinth 2 місяці тому

    ถ้าใครกำลังหางานสายนี้ สปอนเซอร์งานนี้หลายๆ เจ้า กำลังหาคนมาร่วมงานด้วยอยู่ครับบ ดูรายละเอียดได้ที่ grtn.org/bac-recruitment ได้เลย~