Friday, February 28, 2014

Review: Corona SDK part.1

หลังจากใช้มาเกือบสองเดือน ก็เลยลองมาเขียนreviewขำๆดูหน่อยละกัน

*ภาพประกอบไม่เกียวข้องกับเนื้อหาแต่อย่างใด

Official site: http://coronalabs.com/

Corona SDK เป็นเครื่องมือทำทำให้เราสามารถสร้าง Mobile application ได้ง่าย แบบ ง่ายมากๆ
สามารถ Build ไปลงได้ทั้ง iOS และ Android และคุณไม่ต้องปวดหัวกับภาษาต่างดาวอย่าง Objective-C หรือ Java อีกต่อไป คุณแค่ต้องเปลี่ยนมาปวดหัวกับภาษา Lua แทน :D
เอาล่ะครับ เดียวกลับมาว่ากันเรื่องภาษานะ

มาดูกันว่ามันมีอะไรให้คุณบ้างนะ เจ้า Corona นี่ เอาที่ผมได้ใช้แล้วจริงๆนะ

1.อย่างแรกก็คือ มันวาดรูปได้!!
แหงอยู่แล้วป่ะ Tool สร้างเกม ดันวาดรูปไม่ได้ แล้วมันจะทำมาหากินได้ยังไง
เอาเป็นว่า คุณสามารถวาดรูปทรงพื้นฐานลงไปบนหน้าจอได้ครับ วงกลม สี่เหลี่ยม หลายเหลี่ยม รวมไปถึงกำหนดตำแหน่ง, สี, ฯลฯ อันนี้ไปดูใน API docs กันต่อนะครับ

2.โหลดรูปได้!!
พื้นสุดๆอ่ะ มันคือการเอาไฟล์รูป ประเภทต่างมาแปะบนหน้าจอได้ครับ Support ฟอร์แมตที่นิยมใช้ันอยู่ในสากลโลก ถ้าใช้ png ก็จะทำTransparentได้

3.ทำ Sprite ได้
เราทำ Animation เป็น sprite sheet มา แล้วก็โหลดเข้ามาในโปรแกรมแล้วก็ทำให้มันเล่นเป็น sequence ได้นะครับ Version ล่าสุดที่ผมใช้นี่เป็น native support แล้วด้วย เป็นของที่คนทำเกมขาดไม่ได้เลยล่ะ

4.การกำหนดตำแหน่ง เรากำหนด origin ได้
เมื่อวาดรูปขึ้นมาแล้ว มันสารถกำหนด anchorX, anchorY ให้กับ Object ได้ ปกติมันจะมีค่าเป็น 0 ทั้งคู่ ซึ่งหมายถึงจุดที่อ้างอิงตรงกลางของ object มีผลเวลาที่กำหนดตำแหน่ง x,y มันจะอยู่ตรงกลาง ...งงมั้ยครับ คือปกติ แล้ว เรามักจะคิดว่า 0,0 จะต้องเริ่มจากมุมซ้ายบนเสมอใช่มั้ยครับ แต่ Corona มันสามารถกำหนเได้ว่า 0,0 นั้น จะให้เริ่มที่ตรงไหน เช่น จากตรงกลาง หรือ มุมขวา ซึ่งช่วยอำนวยความสะดวกให้เราได้มากทีเดียวครับ

5.มี Transition
รู้จัก Tween กันใช่มั้ยครับ ถ้าไม่ก็มันคือการเคลื่อนที่ Object จากที่หนึ่งไปอีกที่หนึ่งแหละครับ แต่ถ้าเราไปแก้ค่า x,y โดยตรงเลย มันก็จะวาปไปอยู่ที่ตรงนั้นเลย แต่เราอยากให้มันเคลื่อนที่ไปแบบเนี่ยนๆ เราก็ใช้ Transition เข้ามาช่วยครับ กำหนดตำแหน่งปลายทาง แล้วก็ช่วงเวลาที่ต้องการ แล้วมันก็จะบินไปเองฮะ ง่ายป่ะล่ะ

6.Event driven
ก็เหมือนๆกับ GUI ทั่วไปนะครับ ที่ใส่ listener ให้กับ Object ทีเราต้องการได้ เช่น tap, touch นอกจากนี้ก็มีพวก Event เกียวกับ sprite ที่เพิ่มเติมเข้ามา เช่น Sprite animate เล่นจบแล้ว หรือเริ่มเล่นเป็นต้น แล้วก็พวก Event เกียวกับ Physics ครับ ที่นิยมใช้กันมากๆ ก็อย่างเช่นการตรวจจับ Colliison

7.Physics
ความเจ๋งอีกอย่างของมันคือมี 2D Physics มาให้เลยครับ แค่เราสั่งเปิดใช้เท่านั้น เกมของเราก็จะมีระบบฟิสิกส์ทันที แต่ต้องไปเพิ่มโค้ดอีกนิดหน่อย หาอ่านได้ใน Tutorial ครับ

มันยังมีอีกเยอะนะครับ เช่นมี Simulator ที่ดี, มี Features เกี่ยวกับการใส่ Ads ฯลฯ แต่เท่าที่เขียนมานี่ก็พอจะทำเกมง่ายๆแปะโฆษณาได้แล้วล่ะ

ลองมาดูข้อเสียกันบ้าง
 - เวลา Build ต้องส่งโค้ดของเราไปที่ server ของเค้า วันไหนเน็ตไม่ดีหรือล่ม ก็ลืมมันไปซะ (อยาก Build เองเหรอ จ่ายตังสิ)
 - ไม่มี Auto update นะ ติดตามกันเอาเอง
 - ไม่มีใน Linux
 - ง่ายเกินไป อันนี้ก็แล้วแต่คน แต่ถ้าติดกับความง่ายของ Corona แล้ว จะขยับไปหา Tool ตัวอื่นหรือเข้าถึง Native ลำบากนะ
 - External tool หรือ 3rd party lib ส่วนใหญ่ไม่ฟรี ในโลกของ Corona มันมีฝูงหมาป่ารอขย้ำคุณอยู่นะ ถ้าเป็นไปได้ก็พยายามพึ่งตัวเองให้ได้มากที่สุดครับ (ผมไม่ได้ห้ามซื้อนะ แต่อยากให้ดูดีๆก่อน ถ้าสักแต่ว่าซื้อๆ ก็อาจจะได้ของที่ไร้ประโยชน์มา เสียเงินเปล่า)
 - ไม่มี Styling  อยากทำ Font สวยๆ เดิ้นๆ มี Shadow มี outlined เหรอ เจ้าจงไปหาวิธีทำกันเอาเอง (หรือไม่ก็เสียตังซื้อ tool )

สรุปว่ามันเป็นเครื่องมือที่ดีตัวหนึ่งเลยนะครับสำหรับการทำเกม แค่เวอชั่นฟรีก็เพียงพอที่จะทำเกมได้ทั้งเกมแล้ว ใช้เวลาศึกษาไม่มาก(สำหรับมือใหม่จริงๆเลย) tutorial เพียบ community ค่อนข้างใหญ่ แต่ผมว่ายังไงก็คงต้องจ่ายเงินให้เขาสักวันล่ะนะ อิอิ

ไว้มาต่อ Part 2 เกียวกับตัวภาษา Lua



Tuesday, February 25, 2014

Lean coffee

พอดีมีโอกาสได้ไปเข้าร่วม Lean coffee กับคุณนนท์ ก็เลยมาบล็อกเก็บเอาไว้สักหน่อย



มันก็เป็นการ meeting รูปแบบหนึ่งแหละครับ ใน Official site บอกว่า มันคือ structured, but agenda-less meeting
เริ่มจากการให้ผู้ที่เข้าร่วมทุกคนเขียนหัวข้อขึ้นมา ใส่ card แล้วก็เอามาแปะๆไว้ แล้วก็ใช้เวลาอีกเล็กน้อยให้ทุกคนอธิบายหัวข้อของตัวเองว่ามันคืออะไรแน่

เสร็จแล้วก็ทำ  dot vote โดยที่แต่ละคนโหวตได้ 2 ครั้ง จะโหวตเรื่องของตัวเองหรือโหวตของคนอื่นก็ได้

พอโหวตเสร็จแล้ว ก็เอามาจัด priority ตามหัวข้อที่มีคะแนนโหวตมากที่สุด แล้วก็เริ่มคุยกัน

เมื่อเราเริ่มคุยกัน เราจะมีเวลา 5 นาที ในการคุยหัวข้อนั้น (มี facilitator คอยจับเวลา) ก็คุยกันไปครับ (ยอมรับเลยว่าเลเวลผมมันน้อยมากจริงๆ หาช่องพูดไม่ค่อยได้เลย เศร้า T-T) ถ้าหมดเวลาแล้วแต่ยังพูดไม่จบ ก็พูดต่อให้จบได้

พอหมดเวลาก็ให้สมาชิกมาโหวตอีกว่าจะคุยเรื่องนี้กันต่อมั้ย
โดยมีทางเลือก สามอย่าง คือ
Y = คุยต่อ
N = ไม่เอาละ
O = ยังไงก็ได้ (No vote) อันนี้โดนติงมาว่าอย่า no vote มาก ทำตัวไม่ถูก ก็น่าคิดนะฮะ ถ้า No vote กันหมดแล้วจะเอาไงต่อ ประเทศชาติจะเดินต่อไปยังไง ต้องปฏิรูปก่อนมั้ย ... เอิ่ม พอดีกว่า

เอาเป็นว่า ถ้า Y เยอะ ก็คุยเรื่องเดิมต่ออีก 5 นาที ถ้า N เยอะ ก็ เอาเรื่องต่อไปมาคุย

ทำอย่างนี้ไปจนหมดเวลา ซึ่งกำหนดไว้ที่ครึ่งชั่วโมง

ในตอนท้าย คุณนนท์ยังบอกอีกว่า ที่เราทำกันไปเป็น Lean coffee แบบมาตรฐาน สามารถนำไปปรับให้เข้ากับองค์กรณ์หรือทีมของตัวเองได้

เสร็จแล้วก็มาทำ Retrospect กันหน่อย อันนี้ส่วนตัวของผมนะ มีเพิ่มเติมนิดหน่อยครับ ตอนนั้นคิดไ่ม่ทัน แหะๆ
Good
 - มีเรื่องที่จะคุยชัดเจน มีเตรียมหัวข้อมาก่อน
 - Dead air น้อยมาก อาจจะเป็นเพราะสมาชิกแต่ละท่านเลเวลสูงๆกันทั้งนั้นเลย
ฺBad
 - มีหัวข้อที่ไม่ได้คุยเยอะ คนที่หัวข้อไม่ได้รับการโหวตอาจจะน้อยใจได้ :)
 - อุปกรณ์กับเน็ตผมกากมาก ทั้งหลุดทั้งส่งเสียงรบกวน
 - ผมพูดน้อยมาก
Try ตอนนั้นคิดไม่ทัน เลยบอกไปว่าไม่มี
 - ได้คุยกับพี่มุ้ยต่อหลังจากนั้น น่าจะเอาหัวข้อที่น่าสนใจ มาคุยต่อในกรุ๊ป
 - ใจกล้า หน้าด้าน หาช่องในการพูดบ้าง

หมดละครับ ขอบคุณคุณนนท์กับเพื่อนๆที่มาช่วยกันแชร์ครับ ผมนี่ไม่ค่อยได้แชร์อะไรเลย เฮ้อ



Official site http://leancoffee.org/


Thursday, November 28, 2013

Review: di-lite.js Dependencies injection ใน javascript แบบเบาๆ

ใน Javascript มีคนทำ Dependencies injection อยู่หลายเจ้า อาทิเช่น
wire.js
inverted
di-lite.js
หรือใน angular.js ก็ได้ข่าวว่ามีให้ใช้เหมือนกัน แต่เนื่องจากงานในปัจจุบันมันเกาะติดกับ Backbone อย่างแนบแน่นจนแงะไม่ออกไปเสียแล้ว เป็นอันว่าตัดทิ้งไป

ลองคุ้ยเขี่ยอยู่นาน ก็ตัดสินใจเอาเจ้าตัว di-lite นี่ล่ะมาใช้ เพราะตัวอื่นมันมากับ dependency พ่วงมาอีกประมาณหนึ่ง แถมต้องเขียนโมดูลแบบ AMD ซึ่งผมก็เพิ่งจะรู้เนี่ยแหละว่าเดี๋ยวนี้เขานิยมเขียนแบบนี้กัน

ด้วยเหตุนี้ ก็เลยเหลือตัวเลือกเพียงหนึ่งเดียว แต่ไม่ใช่ว่าจะตัดใจจากตัวอื่นๆแล้วหรอกนะครับ แต่ขอเอาไว้โอกาสหน้าก็แล้วกัน

เริ่มจากข้อดีก่อน
ข้อดีก็คือ มันใช้ง่ายมากๆ คือเขียนยังไงก็ได้ ขอแค่เวลาที่จะ Register มันรู้จัก Class นั้นก็พอ ทำให้แทบจะไม่กระทบอะไรกับงานที่เคยทำมาแล้วเลยครับ สามารถทยอยถอดส่วนที่ยุ่งเหยิงออกมาได้สบายๆ รวมถึงงานที่กำลังจะทำต่อไปในอนาคตด้วย
ในส่วนที่จำเป็นก็มีมาให้เกือบครบ (อะไรที่ขาดไป เดี๋ยวว่ากันอีกที่ในส่วนของข้อเสีย) อย่างเช่น
  • Constructor arguments
  • กำหนด Strategy ได้ (Singleton, Prototype) 
  • ทำ Circular reference ก็ได้
  • เรียก function อัตโนมัติหลังจากที่ initialize เสร็จแล้วได้
ซึ่งเท่านี้ก็เพียงพอสำหรับความต้องการ(ในตอนนี้นะ)

ที่นี้มาดูข้อเสียกันบ้าง
ข้อเสียที่เด่นๆเลยก็คือ วิธีประกาศ Dependencies มันแนวไปหน่อย ลองไปดูก็ได้ครับ ถ้าเราตัดสินใจจะใช้เจ้าตัวนี้ มันก็มีตราบาป (this.dependencies) ติดอยู่กับ Class ของเราไปตลอดกาล
แถมยังมีผลข้างเคียง ถ้ามีเพื่อนร่วมทีมมาดูโค้ดก็จะงง ว่า ไอ้ property ตัวนี้มันมาจากไหน (ซึ่งปกติ Javascript ก็ดูโค้ดยากด้วยตัวมันเองอยู่แล้ว ในระดับหนึ่ง)
ต่อมาคือเขียน Configuration แยกออกมาต่างหากไม่ได้ ต้อง Register เอาเองล้วนๆ ต่อไปถ้ามีของเยอะๆ อาจจะต้องเขียน Module สำหรับเอาไว้ Register โดยเฉพาะเลยก็เป็นได้
ยังทำ reference ไม่ได้ อย่างเช่นจะเอา module ที่ register ไปแล้วมาเป็น Constructor argument แบบนี้ยังทำไม่ได้ (แต่ set หลังจาก initialize แล้วได้นะ ต้องซิกแซกเอาหน่อย)

ซึ่งไปแอบส่อง Milestone เขามานิดหน่อยแล้วล่ะ คิดว่าคงได้รับการปรับปรุงไปเรื่อยๆ สู้ต่อไปนะ ทาเคชิ

สรุปว่าก็นำมาใช้งานได้ในระดับหนึ่ง อย่างน้อยมันก็ดีกว่ามานั่ง new แล้ว assign ให้เอาเองล่ะนะ แล้วก็ทำให้เขียน Class กับ Test ได้ง่ายขึ้นด้วย ตัวอื่นๆอาจจะเจ๋งกว่านี้ แต่มันต้องเปลี่ยนเยอะ เหนื่อย เอาไว้มีโอกาสทำอะไรเล่นอาจจะเอาตัวอื่นๆมาลองอีกครับ


Thursday, November 21, 2013

ทำไมมันขายไม่ออกวะ

ครับ หลังจากที่ผมเอาTDDไปขายแล้วเกิดอุบัติเหตุดราม่าขึ้นมาจนเซ็งไปหลายวัน
พอจิตใจเริ่มสงบ + ไประบายใน Testing Wednesday มา ก็ได้มุมมองและข้อคิดกลับมา (ดราม่าจนเสียการเสียงานแล้วต้องได้อะไรกลับมาบ้างเนอะ :)))) ถ้ามีโอกาสก็ไปกันนะครับ อิอิ

ตอนนี้ที่เริ่มเขียนบล็อกนี่ก็ยังไม่ได้วิเคราะห์อะไรออกมาเป็นชิ้นเป็นอันเลยนะ มีแต่ลอยฟุ้งๆอยู่ในหัว
เพราะงั้นมันอาจจะมั่วๆหน่อยก็ไม่เป็นไรหรอก...มั้ง

ก่อนอื่นเลย มันเกิดอะไรขึ้นกับการขายของผม?

เออ เราว่าเราเข้าใจมันนะ ข้อดีมันก็เห็นๆกันอยู่ ก็รู้อยู่ว่าจะเก็ตมันไม่ใช่เรื่องง่าย
แต่มันดีจริงๆนะ ทำเถอะครับ

เอาล่ะครับ ถึงเวลา อ่ะ มาทำกัน เอาน้องๆมาทำด้วย เริ่มแรกก็ดีครับ ไปได้เรื่อยๆ

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

กำลังจะทำต่อไป ตรงนี้แหละครับ
ยกตัวอย่าง สมมติว่าผมกำลังทำ undo/redo command ถ้าเราจะทำ undo ได้ เราก็ต้องเก็บ state ก่อนหน้าเอาไว้ใช่มั้ยครับ ผมก็บอกว่า ให้เพิ่มเทสลงไปอีก 1 ข้อ นั่นคือ ตัว command ต้องเก็บ state เอาไว้
อันที่จริงผมวางแผนเอาไว้ว่า ตรงนี้เทสมันเริ่มเยอะแล้วใช่มั้ยล่ะ ควรจะแตกคลาสที่เป็นตัว operation ออกไปดีมั้ย

แต่..

กลับถูกแย้งมาว่า ไม่เห็นต้องเทสข้อนี้เลย แค่ do แล้ว undo ได้ก็น่าจะพอแล้วนี่

โอ้พระเจ้า พี่พูดอะไรออกมาน่ะ(นึกถึงเสียงพากย์ในละครเกาหลีไว้นะฮะ)

นี่มัน unit test นะ สิ่งที่กำลังขอให้ทำมันไม่ใช่แล้ว โลกแตกแน่ถ้าทำอย่างที่ว่า

และต่อจากนี้คือดราม่าครับ ไม่อยากเล่า...อาย ขอรวบๆเลยละกัน สิ่งที่ได้มา
  • ท่าเยอะไปไหน กว่าจะทำเสร็จ Performance/Efficiency ทั้งทีมไม่หายไปหมดเหรอ
  • ทำไมต้องแตก Class มั้นเปลืองมั้ย
  • Function ยาวๆ ไม่ extract ได้มั้ยล่ะ เขียน comment เอา
  • Static method มันบาปยังไง
  • Code quality มันคืออะไร? ไม่ใช่ว่าเขาไม่เข้าใจนะ แต่ขอให้ผมอธิบาย ตอนนั้นก็อธิบายออกไปไม่ได้เลย
  • เอาบทความนี้มาให้ดู http://37signals.com/svn/posts/3159-testing-like-the-tsa
  • วิธีถ่ายทอดของผมห่วยแตกมาก พาเพื่อนเซ็ง
  • ใช้คำพูดไม่ดี เวลาไม่ได้ดั่งใจ
  • ตกลงมึงอยากทำงาน หรือทำ TDD!!!
  • มีอีกนะ แต่นึกไม่ออก มันเบลอไปหมดตอนนั้น

ข้อรองสุดท้ายมันสะเทือนใจผมมาก มันอะไรกัน ที่ขวนขวายหาวิธีการอะไรต่างๆเยอะแยะก็เพราะอยากให้งานมันดีขึ้นนะเฮ้ย!

แต่ดูเหมือนจะไม่มีใครมองอย่างนั้น

ผมดูเป็นคนบ้าตำรา ประณีประนอมไม่ได้ ไม่ได้สนใจทีมหรืองานเท่าไหร่หรอก

นี่มันยิ่งกว่าโดน Stun 10วิ หรือโดนรุมตุ๋ยกลางป่าอีกครับ ผมแทบอยากจะออกจากเกมเสียเดี๋ยวนั้นเลย

เสีย Self ครับ บอกตรงๆ

ผมก็จมอยู่กับความรู้สึกแบบนั้นต่อไปอีกสักสองสามวัน เริ่มคิดอะไรได้บ้าง แล้วก็ได้ไปปรับทุกข์กับเพื่อนๆพี่ๆ ซึ่งผมก็เล่าในมุมของผมเป็นส่วนใหญ่ ด้วยอารมณ์ที่มันยังไม่สงบดีในขณะนั้น
คิดมากจนเลิกคิดน่ะครับ แล้ววันนี้รู้สึกโอเคแล้ว ก็มานั่งเรียบเรียงดู

ก็ได้ข้อสรุปว่า
ปัญหาอาจจะมาจากวิธีการขายของผมเองนะ อาจจะด้วยอารมณ์หรืออะไรก็ไม่รู้แหละ ทำให้ทุกอย่างมันดูแย่ และก็ Push มากเกินไป เสนอ(ด้วยวิธีรุนแรง)ให้ทำหลายๆสิ่งหลายๆอย่างมากจนเกินไป ตามตำรามากจนเกินไป ไม่ได้ดูคนรับเลยว่าเขาโอเคมั้ย หรือเขาอยู่ในสภาพแวดล้อมแบบไหน หรือมันอาจจะมีเรื่องอื่นๆผสมๆกันมา จนระเบิดในที่สุด

แน่นอน ผมไม่ได้อยากให้เป็นอย่างนี้เลย

ที่นี้ทางฝั่งคนซื้อ ถ้าเขาไม่รับ เราก็ควรจะถอยออกมา ถือว่าเราทำหน้าที่ของเราไปแล้ว ให้เขารับผิดชอบด้วยตัวเอง ยิ่งไปดราม่าง้องแง้ง เราจะยิ่งดูแย่

ถ้ามันวอดวาย เราก็ค่อยรอตบทีหลัง

สวัสดีครับ
OK bye





Tuesday, November 19, 2013

อยู่ดีๆมันก็หายไป

ผมหงุดหงิด รู้สึกเซ็งๆมาหลายวันติดๆกันแล้ว

จนกระทั่งวันนี้ตลอดทั้งวันก็ยังเป็นอยู่ จนถึงเย็นนี่ล่ะ รู้สึกดีขึ้นมาเฉยๆ

ลองมานั่งพิจารณาว่าเป็นเพราะอะไร เพราะเรื่องที่ทำให้เซ็งช่วงนี้มันก็มีอยู่ลหลายเรื่อง เยอะแยะไปหมด

อาจจะเป็นเพราะ ผมได้ตัดสินใจที่จะ "ยอมแพ้" ให้กับงานตัวหนึ่งที่ปลุกปล้ำมาหลายวันแล้ว ไม่เสร็จซักที
คุณน่าจะเข้าใจนะ ทำยังไงๆมันก็ไม่ผ่านซักที มันน่าหงุดหงิดขนาดไหน แล้วยิ่ง ทำมาติดๆกันหลายวันแล้วด้วย ยิ่งไปกันใหญ่เลย
สุดท้ายตัดสินใจ เอาวะ ยอมแพ้เหอะ แล้วไปบอกทีมว่างานนี้แก้ไม่ได้ ไม่ทำได้มั้ย แล้วก็โอเค

แต่ที่ดีกว่านั้นคือ ความเซ็งที่มันเกาะกินจิตใจมาเป็นอาทิตย์ๆ เหมือนมันจะเบาบางลงไป เยอะเลย


Monday, November 18, 2013

หรือว่าเราเองที่ไม่ชอบให้เถียง

ผมไม่ชอบเถียงกับใคร
ด้วยความที่เป็นคนคิดอะไรช้า เวลาเถียงกับใครก็คิดไม่ทันเขา เลยพยายามเลี่ยงอย่างที่สุด

วันนี้ได้คิดไปคิดมาอยู่หลายตลบ ผิดที่เขาที่มาเถียงผม หรือเป็นผมเอง ที่หงุดหงิดเวลาโดนเถียง

คิดไปคิดมายังไม่ได้คำตอบ จบไว้ดื้อๆเท่านี้แหละ


Sunday, November 17, 2013

fail() ใน jasmine


วันนี้พยายามหาว่าใน jasmine มันมี fail() เหมือนกับใน junit มั้ยนะ คือหาในหน้าหลักแล้วไม่ยักจะมี

ลองไปคุ้ยๆดูก็พบว่า อ้าว ก็มีเหมือนกันนี่ แต่มันมีวิธีการใช้นิดหน่อย ตามนี้ ( ทำไมในหน้าหลักไม่มีก็ไม่รู้แฮะ หรือฉันตาถั่ว หรือมันกั๊ก หรือเป็นเพราะรัฐบาล ... ช่างมันเถอะ)

it("Should do something", function(){
     this.fail(new Error('Not yet implemented'));
});
  • เราไม่สามารถเรียก fail เฉยๆ ได้ ต้องเป็น this.fail(Error)
  • Argument ที่โยนให้ต้องเป็น Error เท่านั้น ใช้ String เหมือน Junit ไม่ได้
ตอนแรกไม่ได้ใช้เลย แต่นั่นเพราะขี้เกียจจะคิด Spec ออกมาก่อนมากกว่า ยังติดนิสัยเดิมๆอยู่บ้าง ซึ่งพอลองใส่สเปคก่อนแล้วค่อยเขียนตามมั้นไป ก็พบว่าดีขึ้นพอสมควร

ยังคงต้องฝึกฝนอีกเยอะล่ะ

เจอจากที่นี่ https://github.com/mhevery/jasmine-node/issues/81