ข้ามไปยังเนื้อหาหลัก

Run Tests (รันชุดทดสอบซอฟต์แวร์)

รันชุดทดสอบ (test suite) รองรับทุกภาษาและเฟรมเวิร์ก เช่น npm, pytest, go test และ make

การอ้างอิง (Reference): loha/run-tests@v1

หมวดหมู่: Test & Lint (การทดสอบและตรวจโค้ด)

รันไทม์ (Runtime): alpine:3.19 (รันแบบ non-root, ตรึงด้วย digest)

สัญญาอนุญาต (License): Apache-2.0

ควรใช้เมื่อ​

ใช้สำหรับรันชุดทดสอบของโปรเจกต์ โดยกำหนดคำสั่งใน TEST_COMMAND ให้ตรงกับเครื่องมือทดสอบที่คุณใช้ สำหรับการตรวจ lint และ type check แนะนำให้แยกไปใช้ task เฉพาะทางเพื่อความชัดเจนของผลลัพธ์

พารามิเตอร์​

พารามิเตอร์ชนิดค่าเริ่มต้นจำเป็นคำอธิบาย
TEST_COMMANDstringmake testไม่คำสั่งที่ใช้ในการรันชุดทดสอบ (test suite)
WORKING_DIRECTORYstring.ไม่ไดเรกทอรีทำงานของ task โดยคิดเทียบจาก root ของ workspace
TEST_IMAGEstringalpine@sha256:6baf43584bcb78f2e5847d1de515f23499913ac9f12bdf834811a3145eb11ca1ไม่คอนเทนเนอร์อิมเมจที่มีเครื่องมือและ dependency พร้อมสำหรับการรัน tests
COVERAGEstringfalseไม่เปิดใช้งานการเก็บและรายงานผล code coverage
TIMEOUTstring600ไม่ระยะเวลาสูงสุดที่อนุญาตให้รัน test (หน่วยเป็นวินาที)
FAIL_ON_ERRORstringtrueไม่กำหนดให้ task ล้มเหลวเมื่อคำสั่งพบข้อผิดพลาด; หากตั้งเป็น false จะเป็นโหมดรายงานผลอย่างเดียว

พื้นที่ทำงาน (Workspaces)​

  • source (จำเป็น): เชื่อมโยงจาก pipeline workspace source
  • test-results (ไม่บังคับ): เชื่อมโยงจาก pipeline workspace test-results

ผลลัพธ์ (Results)​

ผลลัพธ์ (Result)คำอธิบาย
TEST_RESULTผลลัพธ์การทดสอบ: PASS (ผ่าน) หรือ FAIL (ไม่ผ่าน)
TEST_OUTPUTเส้นทางของไฟล์ที่บันทึกผลลัพธ์การรัน tests

การทำงาน​

เริ่มรันคอนเทนเนอร์จาก TEST_IMAGE (ค่าเริ่มต้นคือ Alpine) เปลี่ยนไดเรกทอรีไปยัง WORKING_DIRECTORY แล้วสั่งรัน TEST_COMMAND ภายใต้ระยะเวลาที่กำหนดใน TIMEOUT จากนั้นระบบจะบันทึก exit code และเก็บผลการทดสอบไว้ใน workspace test-results หาก pipeline มีการ mount ไว้อยู่

ตัวอย่าง​

รันชุดทดสอบสำหรับ Node.js​

steps:
- name: test
uses: loha/run-tests@v1
with:
TEST_COMMAND: 'pnpm test:unit'
TEST_IMAGE: 'node:20-alpine'

รันชุดทดสอบ Python พร้อมเก็บ Coverage​

steps:
- name: test
uses: loha/run-tests@v1
with:
TEST_COMMAND: 'pytest --cov=src --cov-report=xml'
TEST_IMAGE: 'python:3.12-slim'
COVERAGE: 'true'
TIMEOUT: '900'

การแก้ปัญหา​

ปัญหา: รัน tests บนเครื่องตนเองผ่าน แต่ task รายงานสถานะ FAIL โดยไม่แสดง error ที่ชัดเจน

วิธีแก้: ตรวจสอบค่า TIMEOUT เนื่องจากการทดสอบแบบ integration test ที่ใช้เวลานานอาจเกินค่าเริ่มต้น 600 วินาที ให้ปรับเพิ่มค่าเวลาให้เหมาะสมกับโปรเจกต์