Bruno API กับการเทสของเขา

พอดีมีเรื่องอยากให้ทดลองใช้ Bruno เครื่องมือที่เหมือนกับ Postman ในการยิง API แต่ว่าดีกว่าพอสมควร ทั้งเบากว่า + ความเป็นส่วนตัวที่มากกว่า

การใช้งานการ Test และคำสั่งควรรู้
ปล. เนื่องด้วยข้างในมันคือ javascript เพราะฉะนั้นแล้ว เราสามารถเขียน javascript เพื่อประยุกต์ใช้งานให้เหมาะกับเราได้

test("ชื่องาน" , function(){
  expect("Hello World")
})
JavaScript

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

const body = res.getBody(); /*เอาไว้สำหรับดึงค่าข้อมูลของ Body ออกมา*/

expect(body).to.be.an("array"); /*เช็คว่าค่าใน body เป็น array หรือเปล่า*/
expect(body).to.be.an("object"); /*เช็คว่าค่าใน body เป็น object หรือเปล่า*/
expect(body).to.be.a("number"); /*เช็คว่าค่าใน body เป็น ตัวเลข หรือเปล่า*/
expect(body).to.be.a("string"); /*เช็คว่าค่าใน body เป็น ตัวอักษร หรือเปล่า*/
expect(body.length).to.be.greaterThan(0); /*เช็คว่า body มี object มากกว่า 0 ตัวหรือเปล่า*/

/*หรือจะเป็นการ Chek ว่ามีอยู่ เป็น null หรือ undefiend ก็สามารถเช็คได้ทั้งหมด*/

expect(body).to.exist;
expect(body).to.not.exist;

expect(body).to.be.null;
expect(body).to.not.be.null;

expect(body).to.be.undefined;
expect(body).to.not.be.empty;

/*หรือจะเป็นการ Check Proerty ก็ได้*/
expect(body).to.have.property("Code");
expect(body).to.have.property("Name", "Age");

expect(body).to.have.all.keys("a", "b");
expect(body).to.include.keys("a");

/*หรืออยากจะเช็คเป็นค่าว่าตรงกันไหมก็ทำได้*/
expect(body).to.equal(10);
expect(body).to.not.equal(5);

expect(body).to.be.greaterThan(5);
expect(body).to.be.at.least(5);
expect(body).to.be.lessThan(20);
expect(body).to.be.at.most(20);

expect(body).to.equal("abc");
expect(body).to.contain("ab");
expect(body).to.match(/^90\.\d+-R$/); /* regex ก็ได้นะ*/
JavaScript

แล้วถ้าเราเขียนเช็คประมาณว่า เห้ยย อยากจะให้ผลลัพธ์ถ้าได้แบบนี้มัน Fail Case ล่ะ ควรจะทำยังไงดี

expect.fail("เคสนี้ไม่ผ่านน๊ะจ๊ะ");
JavaScript

ง่ายแค่นี้เอง….
ถ้าลองเอามาประยุกต์ดูก็จะได้ประมาณแบบนี้

test("version exists", () => {
  expect(body[0].Version).to.equal("90.06-R");
});

test("ผลลัพธ์ต้องเท่ากับ 10 น่ะ", () => {
  if(body.Amount >= 10){
    expect.fail("API นี้บัคนะได้ค่าไม่ตรง");
  }
});
JavaScript

แต่เอาจริงๆ Bruno มันก็สามารถเช็คพวก Params หรือ Body ที่จะไปส่งไปได้ (โดยจะไม่ค่อยมีคนทำก็เถอะ)

const req = bru.getRequest(); /*ดึงค่าจาก params ใน Request*/

test("type param should be release", () => {
  expect(req.params.type).to.equal("release"); /*ถ้าไม่เป็นคำว่า Release จะไม่ผ่านนะ*/
});

/*ถ้าเป็นภาษาใหม่ๆ ที่เอา Path เป็น Params ล่ะ*/

/releasenotelist/{{type}}

const req = bru.getRequest();
test("path param type exists", () => {
  expect(req.params.type).to.exist;
});

/*ซึ่งค่าที่เป็น Body ก็เช็คได้นะ*/
const req = bru.getRequest();

test("request body has site", () => {
  expect(req.body.site).to.equal("Prototype-Dala-AmsManee");
});
JavaScript

จริงๆ ทำได้อีกเยอะเลย เรามาดูข้อควรทำดีกว่า

-1 test ควรจะมีแค่ 1 เรื่องเท่านั้น (อย่าทำให้มันสับสน)
– ควรจะบอก Error ให้สื่อได้ชัดเจน

ปล. ทุกอย่างที่เขียนมาเนี่ย Copy ChatGPT มาทั้งนั้น เดี๋ยวนี้ AI มันฉลาด แค่อยากเอามาสรุปให้เข้าใจในแบบตัวเองเฉยๆ แหละ