๐ ๋ชฉ์ฐจ
- Introduction
- Cypress api mock ํ๊ธฐ
- Conclusion
- Reference
๐ Introduction
์๋ ํ์ธ์. BDD๋ง์ง๋ง ์๊ฐ์ผ๋ก ์ด์ Cypress์์ api call๋ฅผ mock ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ํด๋น ์ฝ๋๋ ์ฌ๊ธฐ์์ ํ์ธํ์ค ์ ์์ต๋๋ค. ํด๋น ์์ ๋ jsonplaceholder์์ todo๋ฅผ ํ๋ ๋ฐํํ๋ ์์ ์ ๋๋ค.
๐ Cypress api mock ํ๊ธฐ
API๋ฅผ mock ํ๊ธฐ์ ์ ๋จผ์ ํ๋์ ์ ์ํด๋ณด๊ฒ ์ต๋๋ค.
- Todo์ ์ ๋ชฉ์ 'hello'๋ผ๊ณ ์ฐ์ฌ์์ด์ผ ํฉ๋๋ค.
Feature: Todo
Background:
Given I am on the main page
Scenario: Todo display
Then I can see Todo with text:
|title|hello|
์ด๋ ๊ฒ ์ด Gherkin์ผ๋ก cypress๋ ์ด๋ ๊ฒ ์ฝ๋ฉํ ์ ์์ต๋๋ค.
const { visit, the } = cy;
Given("I am on the main page", () => {
cy.server();
cy.route("https://jsonplaceholder.typicode.com/posts/1", {
title: "hello",
});
visit("/");
});
Then("I can see Todo with text:", (rawData) => {
const stats = rawData.rowsHash();
const title = stats["title"];
cy.log(stats);
the("todo").contains(title);
});
Given("I am on the main page", ...)๋ถ๋ถ์ ๋ณด๋ฉด cypress server๋ฅผ ๋จผ์ ๋์์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ route๋ฅผ ํตํด ๋ฐ๋ ๊ฒ์ ์์ธํ๊ฒ ์ ์ด์ค๋๋ค. ์ด๋ ๊ฒ ์ ์ด์ฃผ๋ฉด
import * as axios from "axios";
export const fetchTodos = () => {
return axios.get("https://jsonplaceholder.typicode.com/posts/1");
};
fetchTodos์ response๋ { title: "hello" }๊ฐ ๋ฉ๋๋ค.
๐ Conclusion
Cypress์์ api๋ฅผ mock ํ๋ ๋ถ๋ถ์ ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์์ต๋๋ค. ๋ค๋ง ์ด๋ป๊ฒ ์ฌ์ฉํ์ง๋ ๋งค์ฐ ์ด๋ ต์ต๋๋ค. ๋ชจ๋ api๋ฅผ mockํด์ฃผ๋ ๊ฒ์ integration test์ ๋ช ๋ชฉ์ ๋ง์ด ๋ฒ์ด๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ ์ด์ Gherkin์ ์ ์ ์ด์ค ํ์๊ฐ ์์ต๋๋ค. ์์ธํ ๋ถ๋ถ๋ค๋ง๋ค testing์ ์งํํ๋ฉด ์ข๊ฒ ์ง๋ง ๊ทธ๋ฐ ๋ถ๋ถ์ ์ด๋ฏธ tdd์์ unit test์์ ๋ง์ด ๊ฑธ๋ฌ์ก์๊ฑฐ๋ผ ์๊ฐํฉ๋๋ค. ์ต๋ํ ๋ฌถ์ด์ ์ ์ฒด์ ์ธ ํ๋ฆ์ผ๋ก์จ์ integration์ ์งํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๊ทธ๋ผ ๋ค์ ํฌ์คํ ์์ ๋ง๋์~~ ๐
๐ Reference
'Vue BDD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Vue BDD - Cypress ์ ์ฉํ๊ธฐ (0) | 2020.10.13 |
---|---|
Vue BDD - Gherkin (0) | 2020.10.06 |
Vue BDD - Setting (0) | 2020.10.06 |
Vue BDD - Intro (0) | 2020.10.05 |