ใน Cypress จะมีฟีเจอร์หนึ่งที่ช่วยในการจัดการแก้ไขหรือปรับแต่งการตอบกลับของ HTTP requests ที่ถูกเรียกในภายนอกบราวเซอร์ได้ นั่น คือ interceptor
โดยเราสามารถใช้ cy.intercept()
เพื่อสร้าง interceptor และทำการ stub, modify, หรือ spy กับ HTTP requests. ได้อย่างง่ายดาย
Syntax
โดยที่เราสามารถกำหนด url, method, routeMatcher และ staticResponse argument ต่างๆ ได้ โดยในส่วนนี้สามารถเข้าไปอ่านเพิ่มเติมใน Documents ของ Cypress ได้เลย
ตัวอย่าง
ทีนี้เรามาดูตัวอย่างการนำเอา Interception มาใช้ในการทดสอบ โดยสมมติว่า มีหน้า PostLists ที่มีการเรียก getPostLists
สำหรับดึงข้อมูลจาก APIs Service และนำแสดงผลรายการ Posts
import { useEffect, useState } from 'react';
import ApiService from './services';
const PostLists = () => {
const [posts, setPosts] = useState(null);
const getData = async () => {
const response = await ApiService.getPostLists();
setPosts(response);
};
useEffect(() => {
getData();
}, []);
return (
<ul>
{posts &&
posts.map((data) => (
<li key={data.id}>
{`${data.title}: ${data.body}`}
</li>
))}
</ul>
);
};
export default PostLists;
มาดูในไฟล์ Service จะมีฟังก์ชั่น getPostLists
ที่ทำการเรียก APIs เพื่อมาแสดงผล
ในส่วนของการทดสอบ เราสามารถ Stub Response ตัว Service โดยการใช้ interceptor ตามโค๊ดตัวอย่างด้านล่าง
import PostLists from './PostLists';
describe('<PostLists />', () => {
it('renders', () => {
cy.intercept('GET', 'https://jsonplaceholder.typicode.com/posts', {
statusCode: 200,
body: [
{
userId: 1,
id: 10,
title: 'Test',
body: 'Stub response',
},
{
userId: 2,
id: 12,
title: 'Test 2',
body: 'Stub response 2',
}
],
});
cy.mount(<PostLists />);
});
});
นี่เป็นตัวอย่างการใช้งาน Interceptor อย่างง่าย เพื่อให้ทุกคนสามารเริ่มต้นทำมันได้โดยไม่งงกัน