프론트 엔드 코드 테스트는 여전히 많은 개발자에게 혼란 스럽습니다. 그러나 프론트 엔드 개발은 이전에 결코 안정성과 일관성과 같은 안정성과 일관성을 담당하는 개발자들과 더욱 복잡하고 개발자들과 함께 프론트 엔드 테스트는 코드베이스 내의 동등한 시민으로 받아 들여야합니다. 우리는 귀하의 다른 테스트 옵션을 중단하고 가장 잘 사용되는 상황을 설명합니다.
프론트 엔드 테스트는 다양한 자동화 된 테스트 전략을 다루는 담요 용어입니다. 단위 및 통합 테스트와 같은 이들 중 일부는 수년간 백엔드 개발 공동체에서 가장 좋은 모범 사례를 받았습니다. 다른 전략은 새로운 것이며, 지금은 백엔드 및 프론트 엔드 개발의 변화로 인한 것으로 나타납니다.
이 기사가 끝날 무렵 팀과 코드 바베이제와 가장 적합한 테스트 전략을 편안하게 평가할 수 있어야합니다. 다음 코드 예제는 재스민 프레임 워크를 사용하여 작성되지만 규칙 및 프로세스는 대부분의 테스트 프레임 워크에서 유사합니다.
테스트 베테랑 중 하나 인 단위 테스트는 모든 테스트 유형의 가장 낮은 수준입니다. 그 목적은 예상대로 코드 (단위라고 함) 기능의 가장 작은 비트를 독립적으로 보장하는 것입니다.
당신이 집을 위해 레고 세트를 가지고 있다고 상상해보십시오. 빌딩을 시작하기 전에 각 개별 조각을 설명하는지 확인하고 싶습니다 (5 개의 빨간색 사각형, 3 개의 노란색 사각형). 단위 테스트는 입력 유효성 검사 및 계산과 같은 개별 코드 세트가 더 큰 기능을 구축하기 전에 의도 한 것처럼 작동하는지 확인하고 있습니다.
그것은 '한 가지 일을 잘'만트라와 함께 단위 테스트에 대해 생각하는 데 도움이됩니다. 하나의 책임이있는 코드가있는 경우 단위 테스트를 작성하려는 경우가 있습니다.
우리가 간단한 계산기에 대한 단위 테스트를 작성하는 다음 코드 스 니펫을 살펴 보겠습니다.
기술 ( "계산기 작업", 함수 () {
그것 ( "두 개의 숫자", 함수 () {
calculator.init ();
var 결과 = calculator.addnumbers (7,3);
기대 (결과). 토브 (10);
});
});
우리의 계산자 신청, 우리는 계산이 항상 우리가 기대하는 방식으로 독립적으로 작동하는지 확인하고 싶습니다. 이 예에서는 항상 두 개의 숫자를 항상 정확하게 추가 할 수 있는지 확인하고자합니다.
우리가하는 첫 번째 일은 재스민의 일련의 테스트를 설명합니다. 설명하다 ...에 이렇게하면 응용 프로그램의 특정 영역과 관련된 테스트 그룹이있는 테스트 스위트가 생성됩니다. 우리의 계산기의 경우 각 계산 테스트를 자체 스위트에서 그룹화합니다.
스위트 룸은 코드 조직뿐만 아니라 자신의 스위트 룸을 실행할 수 있기 때문에 훌륭합니다. 응용 프로그램의 새로운 기능을 사용하는 경우, 활성 개발 중에 모든 테스트를 실행하고 싶지 않으므로 매우 시간이 많이 걸릴 것입니다. 테스트 스위트를 개별적으로 개별적으로 개발할 수 있습니다.
다음으로 우리는 실제 테스트를 작성합니다. 그를 사용하여 그것 기능, 우리는 테스트중인 기능이나 기능을 작성합니다. 이 예에서는 추가 기능을 테스트하므로 올바르게 작동하는지 확인하는 시나리오를 실행합니다.
우리는 우리가 기대하는 것처럼 코드 기능을 테스트하는 테스트 어설 션을 작성합니다. 우리는 우리의 계산기를 초기화하고 우리를 실행합니다 addnumbers. 추가하려는 두 개의 숫자가있는 기능. 우리는 숫자를 결과로 저장 한 다음 이것이 우리가 기대할 수있는 숫자와 동일하다고 주장합니다 (우리의 경우, 10).
만약 addnumbers. 올바른 수치를 반환하지 못하면 테스트가 실패합니다. 우리는 우리의 다른 계산 - 빼기, 곱셈 등에 대해 유사한 테스트를 작성합니다.
단위 테스트가 각 LEGO 조각을 확인하는 것과 같으면 수용 테스트는 각 단계의 건물 단계를 완료 할 수 있는지 확인하고 있습니다. 모든 조각이 설명되기 때문에 지침이 제대로 실행 가능하고 최종 모델을 만들 수 있음을 의미하지는 않습니다.
수락 테스트 실행중인 응용 프로그램을 통과하고 지정된 작업, 사용자 입력 및 사용자 플로우가 완료되고 작동합니다.
우리의 응용 프로그램이기 때문에 addnumbers. 함수는 올바른 번호를 반환하고, 계산기 인터페이스가 올바른 결과를 제공 할 것으로 예상되는대로 작동하는 것을 의미하지는 않습니다. 버튼이 비활성화되거나 계산 결과가 표시되지 않으면 어떻게됩니까? 수락 테스트는 이러한 질문에 답변하는 데 도움이됩니다.
, "가입 실패 상태", 함수 () {
그것 ( "유효하지 않은 정보 가입을 허용해서는 안된다", 함수 () {
var 페이지 = 방문 ( "/ home");
page.fill_in ( "입력 [이름 = '이메일']", "이메일이 아님");
PAGE.CLICK ( "버튼 [유형 = 제출]");
PAGE.CLICK ( "버튼 [유형 = 제출]");
(page.find ( "# signuperror") hasclass ( "숨김")). tobefalsy ();
});
});
구조는 우리의 단위 테스트와 매우 유사합니다. 우리는 스위트 룸을 정의합니다. 설명하다 , 그런 다음 테스트를 작성하십시오 그것 함수, 일부 코드를 실행하고 결과를 확인하십시오.
그러나 특정 함수와 값을 테스트하는 대신 여기에서는 일부 나쁜 정보를 채울 때 특정 워크 플로우 (가입 흐름)가 예상대로 작동하는지 확인합니다. 테스트 한 단위가 될 수있는 양식 유효성 검사뿐만 아니라 ID가있는 요소가 보여주는 오류 상태를 보여주는 것에 대한 취급과 같이 여기에서 일어나는 일이 더 많이 있습니다. SignuPerror. ...에
수락 테스트는 주요 경험 흐름이 항상 올바르게 작동하는지 확인하는 좋은 방법입니다. 가장자리 케이스 주변의 테스트를 추가하고 QA 팀이 응용 프로그램에서 찾을 수 있도록 쉽게 사용할 수 있습니다.
허용 테스트를 작성 해야하는 것을 고려할 때 사용자의 이야기는 시작할 수있는 훌륭한 장소입니다. 사용자가 귀하의 웹 사이트와 어떻게 상호 작용하는지, 그 상호 작용의 예상 결과는 무엇입니까? 유닛 테스트와 다른 기능 요구 사항과 같은 기능 요구 사항과 같은 기능과 같이 유닛 테스트와 다릅니다.
소개에서 언급했듯이 일부 유형의 테스트는 Frontend 세계에 고유합니다. 이들 중 첫 번째는 시각 회귀 테스트입니다. 이것은 코드를 테스트하지는 않지만 프로덕션, 스테이징 또는 미리 변경된 로컬 환경에서 렌더링 된 응용 프로그램의 렌더링 버전과 함께 코드의 렌더링 된 결과를 비교합니다.
이것은 일반적으로 헤드리스 브라우저 (서버에서 실행되는 브라우저) 내에서 찍은 스크린 샷을 비교하여 수행됩니다. 이미지 비교 도구는 두 샷 간의 차이를 감지합니다.
Phantomcss와 같은 도구를 사용하여 테스트를 사용하여 테스트 러너가 탐색 해야하는 위치를 지정하고 스크린 샷을 찍어야하며 프레임 워크는 해당 뷰에서 발생한 차이점을 보여줍니다.
casper.start ( "/ home"). 그런 다음 (함수 () {
// 초기 양식의 상태
phantomcss.screenshot ( "# signupform", "가입 양식");
// 가입 버튼을 누르십시오 (트리거 오류가 발생해야합니다).
casper.click ( "버튼 # 가입");
// UI 구성 요소의 스크린 샷을 찍습니다
phantomcss.screenshot ( "# signupform", "폼 오류 가입");
// name 속성별로 양식을 채우십시오. & amp; 제출
casper.fill ( "# signupform", {
이름 : "Alicia sedlock",
이메일 : "[email protected]"
}, 진실);
// 성공 상태의 두 번째 스크린 샷을 찍습니다
phantomcss.screenshot ( "# 가입 폼", "폼 성공 가입");
});
수락 및 단위 테스트와는 달리 시각 회귀 테스트는 새로운 것을 구축하는 경우 혜택을줍니다. UI가 활성 개발 과정에서 빠르고 급격한 변화를 볼 수 있으므로 인터페이스 조각이 시각적으로 완료되면 이러한 테스트를 저장할 수 있습니다. 따라서 시각 회귀 테스트는 쓰는 마지막 테스트입니다.
현재 많은 시각적 회귀 도구가 약간의 수작업을 필요로합니다. 지점에서 개발을 시작하기 전에 스크린 샷 캡처를 실행하거나 인터페이스를 변경하면서 기준 스크린 샷을 수동으로 업데이트해야 할 수 있습니다.
이것은 단순히 개발의 본질 때문에 - ui. 의도적 일 수 있지만 테스트는 '예,이게 동일하지만'아니오, 이것은 다릅니다 '. 그러나 시각적 회귀가 신청서 내에서 통증 인 경우이 접근법은 끊임없이 고정 된 회귀와 비교하여 팀 시간과 노력을 충족시킬 수 있습니다.
프론트 엔드 테스트를 중심으로 문화와 인식이 커지면서 생태계의 다양한 측면을 테스트 할 수있는 능력이 있습니다. 향상된 초점을 감안할 때 접근성 우리의 기술 문화의 성과를 통해이 제품을 테스트 제품군에 통합하면 이러한 개념이 우선 순위가 남아 있습니다.
성능 예산이나 접근성 표준을 시행하는 문제가있는 경우 사람들의 마음의 최전선에도 이러한 요구 사항을 유지하는 방법입니다.
이러한 수표는 모두 워크 플로우와 Gulp와 같은 빌드 도구로 워크 플로우에 통합 될 수 있습니다. 성능 예산의 경우 Grunt-Perfbudget과 같은 도구를 사용하면 지정된 작업 내에서 WebPagetest를 통해 사이트를 자동으로 실행할 수 있습니다.
그러나 작업 러너를 사용하지 않는 경우 PerfBudGet을 독립 실행 형 NPM 모듈로 잡고 수동으로 테스트를 실행할 수도 있습니다.
터미널을 통해이 작업을 실행하는 것과 같습니다.
Perfbudget --url http://www.aliciation.com - 키 [WebPagetest API 키] --speedindex 2000 - 렌더 400
그리고 마찬가지로, 그만큼 설정 :
perfbudget : {
기본: {
옵션 : {
URL : 'http://aliciability.com',
키 : 'WebPagetest API 키',
예산 : {
SpeedIndex : '2000',
렌더링 : '400'
}
}
}
}
[...]
grunt.registertask ( 'default', [ 'jshint', 'perfbudget']);
액세스 가능성 테스트에서도 동일한 옵션을 사용할 수 있습니다. 그래서 PA11의 경우, 당신은 그것을 실행할 수 있습니다 PA11Y. 이 단계를 자동화하기 위해 브라우저에서 브라우저의 명령을 설정하거나 작업을 설정하십시오. 터미널에서 :
PA11Y ALICIFIALITYCOM.
// npm 설치 후 JavaScript 명령으로
var pa11y = 요구 ( 'pa11y'); // PA11Y가 필요합니다
var test = pa11y (); // pa11y를 준비 할 준비를하십시오
test.run ( 'aliciibility.com', 함수 (오류, 결과) {
// 우리의 결과 구문을 기록하십시오
});
이러한 범주의 대부분의 도구는 꽤 플러그 앤 플레이이지만 테스트가 실행되는 방법을 사용자 정의하는 옵션을 제공합니다. 예를 들어 특정 WCAG 표준을 무시하도록 설정할 수 있습니다.
다음 페이지 : 워크 플로에 테스트를 도입하는 방법
현재 페이지: 다른 유형의 프론트 엔드 테스트 (및 사용시를 사용할 때)
다음 페이지 테스트 문화를 수용하고 시행합니다Illustrator에 대한 최선의 사항 중 하나는 자신의 브러시를 만들 수있는 능력입니다. 온라인으로 놀..
몇 가지 행운의 개발자 와이 저자는 Tech Edit Osmani의 새로운 이미지 최적화 전자 책을 편집 할 수있..
노드 기반의 절차 접근 방식을 사용하여 SideFX의 3D 소프트웨어 Houdini는 현저한 수준의 전력, 유연�..
부정적인 그림은 그 그림을 그리는 것을 말합니다 [삼] 부정적인 공간 긍정적 인 모양을 정의합니다. 이것은 특히 전통적인 수채화 물�..