Cypress를 사용한 테스트 드라이브 개발
12682 단어 reactlitmuschaostestingjavascript
단원 테스트는 무엇입니까?
첫 번째 일!단원 테스트가 무엇인지 알아보자.
단원 테스트는 프로젝트의 기본 구축 블록(방법, UI 요소 등)이 정상적으로 작동하는지 확인합니다.React 구성 요소에서, 이것은 개발자에게 그들이 정확하게 렌더링되었는지, 도구가 정확한 상태로 구성 요소에 전달되었는지 등을 알려 줍니다.
왜 그것이 중요합니까?
Litmus는 개발자와 SRE가 응용 프로그램 배치의 약점을 발견할 수 있도록 Kubernetes에 혼돈을 설정하는 도구를 제공하는 혼돈 프로젝트 프레임워크입니다.그것은 매우 사용하기 쉽고 상세한 문서를 첨부한다.그것은 또한 대량의 혼돈 실험을 제공했으니, 너는 찾을 수 있다.만약 당신이 리트머스를 배우기 시작하고 싶다면, 본고는 틀림없이 당신에게 도움이 될 것입니다.당신도 우리의 slack 커뮤니티에 가입하여 공개 토론을 진행할 수 있습니다.현재 React와 Typescript를 사용하여 전방에 컨트롤러와 사용자 인터페이스 체험을 제공하고 혼돈된 작업 흐름을 관리하고 감시하며 둘러싼 사건을 관리하는 데 사용되고 있습니다Litmus Portal.
측백나무는 무엇입니까?
Cypress는 자바스크립트 기반의 테스트 프레임워크로 모차 위에 구축되어 있으며 모차 자체는 기능이 완비된 자바스크립트 테스트 프레임워크이다.또한 다중 브라우저 테스트를 포함하여 더욱 쉽게 사용할 수 있습니다.
공식documentation of Cypress에서 설명한 바와 같이 Cypress는 개발자가 모든 유형의 테스트를 작성하도록 도와줍니다.
구현을 시작하기 전에 왜 Cypress를 선택하여 단원 테스트를 하는지 알아보겠습니다.따라서 주요 원인은 다음과 같습니다.
“data-cy”
속성을 사용하여 원소를 더욱 쉽게 포지셔닝할 수 있도록 하고 표지, id 또는 클래스 포지셔닝 원소를 사용하는 것을 방지해야 한다. 왜냐하면 이런 원소는 변경되기 쉽기 때문이다.예:
<button id="main" class="btn btn-large" name="submission"
role="button" data-cy="submit">Submit</button>
cy.get('[data-cy=submit]').click()
cypress/components
디렉터리의 litmus-portal/frontend
에 저장됩니다.현재,cypress와 작은react 프로그램을 설치할 것입니다.
선행 조건:
npm install cypress
yarn add cypress
Cypress가 성공적으로 설치되면 이 명령을 실행하여 시도할 수 있습니다.개방 측백나무
npx cypress open
yarn run cypress open
Typescript를 사용하여 react 응용 프로그램에서 셀 테스트에 대한 Cypress를 설정합니다.Cypress React Unit 테스트 플러그인 설치
npm install --save-dev cypress cypress-react-unit-test
tsconfig를 설정합니다.이것들을 추가하면{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"types": ["node", "cypress"]
},
"include": ["src", "cypress/component/*.tsx"]
}
cypress를 설정합니다.이것들을 추가하면{
"experimentalComponentTesting": true,
"componentFolder": "cypress/component",
"specFiles": "*spec.*",
"defaultCommandTimeout": 4000,
"execTimeout": 200000,
"taskTimeout": 200000
}
테스트 용례를 포함하는 폴더를 지정했는지 확인하십시오. 이 테스트 스크립트는 cypress/components
폴더에 있습니다.이 시간 초과here를 검사할 수 있습니다.
Cypress 폴더에서
plugin/index.js
파일에 다음 내보내기 문을 추가합니다.* @type {Cypress.PluginConfig}
*/
module.exports = (on, config) => {
require("cypress-react-unit-test/plugins/react-scripts")(on, config);
// IMPORTANT to return the config object
// with the any changed environment variables
return config;
};
이 파일에서 우리는 함수를 내보냈다.Cypress는 이 함수를 호출하여 항목의 설정을 전달하고 공개된 이벤트에 연결할 수 있도록 합니다.Cypress에서 첫 번째 유닛 테스트 작성
따라서 이 기본적인react 프로그램을 만들었습니다. 사용자는 InputField를 사용하여 1-10 사이의 값을 입력하고 진도막대는 색을 변경합니다. 반원 진도막대가 있어서 입력한 값에 따라 입력하고 변경할 수 있습니다.우리도 리트머스 문호에서 이 부품들을 사용했다.
용례:
이 구성 요소에 대한 단원 테스트를 작성해 보겠습니다.
선형 진행률 막대
이 구성 요소에 대해 다음과 같은 몇 가지 테스트를 수행합니다.
/// <reference types="Cypress" />
import React from "react";
import { mount } from "cypress-react-unit-test";
import LinearProgressBar from "../../src/components/ProgressBar/LinearProgressBar";
describe("Linear Progressbar Testing", () => {
it("Progressbar stroke for value 2", () => {
mount(<LinearProgressBar value={2} />);
cy.get(".rc-progress-line-path").should(
"have.css",
"stroke-dasharray",
"20px, 100px"
);
});
it("Progressbar stroke for value 8", () => {
mount(<LinearProgressBar value={8} />);
cy.get(".rc-progress-line-path").should(
"have.css",
"stroke-dasharray",
"80px, 100px"
);
cy.get(".rc-progress-line-path").should("have.attr", "stroke", "#109B67");
});
it("Progressbar stroke for value 6", () => {
mount(<LinearProgressBar value={6} />);
cy.get(".rc-progress-line-path").should(
"have.css",
"stroke-dasharray",
"60px, 100px"
);
cy.get(".rc-progress-line-path").should("have.attr", "stroke", "#F6B92B");
});
describe()
: 이 함수는 해당 구성 요소의 테스트 세트를 "선형 진행률 게이지 테스트"라고 설명하는 데 사용됩니다.it()
: 이 함수를 사용하여 "Progressbar stroke for value 2"와 같은 특정한 테스트 이름을 지정했습니다.참고:
describe()
및 it()
은 Mocha가 제공하는 테스트 인터페이스입니다.describe("Linear Progressbar Testing", () => {
it("Progressbar stroke for value 2", () => {
mount(<LinearProgressBar value={2} />);
cy.get(".rc-progress-line-path").should(
"have.css",
"stroke-dasharray",
"20px, 100px"
);
});
mount()
: 이 기능은 테스트에 사용할 구성 요소를 설치합니다.우리는 여기에 구성 요소가 사용하는 속성, 즉 값 = {2}를 추가했습니다.
구성 요소가 정확하게 설치/구현된 후에 구성 요소의 다른 속성을 검사할 수 있습니다. 예를 들어 이 예에서 should ("have.css", "cssproperty", "cssvalue") 의 도움으로 값이 2일 때 진도표의 너비를 검사할 수 있습니다.
테스트가 성공하면 브라우저에서 다음 결과를 얻을 수 있습니다.
마찬가지로 다음 테스트에서:
mount(<LinearProgressBar value={8} />);
cy.get(".rc-progress-line-path").should(
"have.css",
"stroke-dasharray",
"80px, 100px"
);
cy.get(".rc-progress-line-path").should("have.attr", "stroke", "#109B67");
});
여기서, 우리는 서로 다른 속성 값 8로 구성 요소를 다시 설치합니다.완료 후, 우리는 진도표의 폭을 검사하고, 이 예에서
“#109B67”
이 값이 7보다 높기 때문에 정확한 색깔이 표시되었는지 검사할 수 있다.이것은
should(“have.attr”,” stroke”,”#109B67”)
를 사용하여 완성할 수 있습니다. 여기서 우리는 필획의 색깔이 용례에 부합되는지, 즉 Green / #109B67
을 검사합니다.반원 진행률 막대
이 구성 요소의 테스트 스크립트는 다음과 같습니다.
/// <reference types="Cypress" />
import React from "react";
import { mount } from "cypress-react-unit-test";
import SemiCircularProgressBar from "../../src/components/ProgressBar/SemiCircularProgressBar";
// Test Suite -
// Progress Bar props -> value = 50, 10, 100
describe("Semi Circular Progress Bar has appropriate values", () => {
[50, 10, 100].map((i) => {
it(`Value is equal to ${i}`, () => {
const wrapper = <SemiCircularProgressBar value={i} />;
mount(wrapper);
cy.get("[data-cy=progressValue]").then((value) => {
expect(value[0].innerText).to.equal(`${i}%`);
});
});
});
});
// Test Suite - Icon has the correct src
describe("Icons have a correct path", () => {
it("Progress Bar icon has a correct source", () => {
const wrapper = <SemiCircularProgressBar value={40} />;
mount(wrapper);
cy.get("[data-cy=progressIcon]")
.should("have.attr", "src")
.should("include", "./icons/graph.svg");
});
});
이 구성 요소에 대해 우리는 네 개의 테스트를 실행할 것이다.세 가지 테스트는 도구에서 정확한 값이 통과되었는지, 마지막 테스트는 이미지가 정확한 출처에서 왔는지 확인하는 데 사용됩니다.여기서 우리가 사용하는 것은 구성 요소와 비치는 값 그룹입니다.
[50, 10, 100].map((i) => {
it(`Value is equal to ${i}`, () => {
const wrapper = <SemiCircularProgressBar value={i} />;
mount(wrapper);
cy.get("[data-cy=progressValue]").then((value) => {
expect(value[0].innerText).to.equal(`${i}%`);
});
});
});
여기에서 우리는 "[data-cy=progressValue]"
테스트 용례를 작성하고 있는 요소를 쉽게 사용할 수 있다.그런 다음 다음과 같이 어셈블리에 정확한 값을 표시할 수 있습니다.it("Progress Bar icon has a correct source", () => {
const wrapper = <SemiCircularProgressBar value={40} />;
mount(wrapper);
cy.get("[data-cy=progressIcon]")
.should("have.attr", "src")
.should("include", "./icons/graph.svg");
});
이와 유사하게 이러한 테스트 용례에서 우리는 위에서 논의한 should()
속성을 사용하여 이미지의 원본이 정확한지 검사한다.결론
이것은 우리가 Cypress를 사용하여 단원 테스트를 하는 몇 가지 기본적인 예이다.원한다면 더 많은 테스트 세트here를 추가할 수 있습니다.제안이나 피드백이 있으면 언제든지 현재 진행 중인 프로젝트 - Litmus Portal 를 확인하십시오.필요한 변경 사항을 발견하면 언제든지 청구서를 제출할 수 있습니다.
이 블로그의 작성자는 다음과 같습니다.
마지막으로 가장 중요하지 않은 것은 아니다. 혼돈공사가 당신을 흥분시키거나 해운원생 혼돈공사를 더 많이 이해하고 싶다면 우리Litmus website와Litmus repo를 살펴보는 것을 잊지 마라.만약 네가 재미있다고 생각한다면, 반드시 별 하나를 남겨야 한다.😊
건배!
Reference
이 문제에 관하여(Cypress를 사용한 테스트 드라이브 개발), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/amityt/test-driven-development-using-cypress-298k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)