재스민 테스트 튜토리얼

테스트는 웹 개발에서 점점 중요해지고 있는데, 특히 DevOps가 끊임없이 증가하는 상황에서 더욱 중요하다.지속적인 통합과 배치가 표준이 됨에 따라 원본 코드를 어떻게 정결하게 유지하고prod나 다른 환경에서 미친 내용이 없도록 해야 합니다.이 점을 실현하는 방법 중 하나는 자동화 테스트를 사용하는 것입니다. 비록 테스트를 작성해야 하지만.
이것은 TDD와 BDD가 민첩한 환경에서 어떻게 일하고 Jasmine로 단원 테스트를 작성하는지에 대한 빠른 강좌입니다.우리는 TDD와 BDD를 사용하여 단원 테스트를 작성하는 과정을 통해 우리가 왜 이렇게 하는지, 그리고 우리가 어떻게 결정하는지 설명할 것이다.

TDD 및 BDD 배경 정보


TDD와 BDD의 몇 가지 배경 지식부터 시작합시다.여기서 당신은 이 두 가지 기능에 대해 더욱 깊이 있지만 빠른 개술을 할 수 있습니다. TDD/BDD overview 간단히 말하면, BDD는 기능이 어떻게 작동하고 사용자가 그것을 어떻게 사용해야 하는지를 설명하고, TDD는 이러한 기능을 위해 코드를 작성하기 전에 테스트를 작성하도록 합니다.이 두 가지 방법을 동시에 사용하면 당신에게 약간의 이익을 가져다 줄 것입니다.
  • 당신의 팀은 기능 수요가 어디에서 오는지, 왜 그것이 필요한지 이해할 것입니다.
  • 프로젝트에 광범위한 테스트 범위가 있을 것입니다. 이로써 더 높은 품질의 코드를 더 빨리 생성할 수 있습니다.
  • 코드의 어느 부분에서도 문서는 문제가 되지 않는다. 왜냐하면 개발자라면 누구나 테스트를 보고 코드가 어떻게 작동하는지 알 수 있기 때문이다.
  • 코드를 작성하기 전에 테스트를 작성하면 당신이 해결하고자 하는 문제를 더욱 잘 이해할 수 있습니다.
  • 코드를 테스트하면 CI/CD 파이프를 더욱 안정적이고 일치하게 만들 수 있습니다.
  • 이것들은 단지 네가 작성 테스트에서 얻은 약간의 우세일 뿐이다.지금 나는 Jasmine로 두 개의 테스트를 작성할 것이다.js.같은 과정도 전단이나 후단의 모든 라이브러리를 사용하여 테스트를 작성할 수 있다.

    사용자 이야기


    이것은 두 명의 사용자 이야기입니다. 우리는 그것들을 사용하여 테스트를 작성할 것입니다.
    사용자 이야기 1
    관리자 사용자로서, 나는 내가 선택한 권한을 가진 모든 사용자를 비활성화할 수 있으며, 내가 시스템에서 같은 권한을 가진 여러 사람을 동시에 삭제할 수 있도록 할 수 있다.
    사용자 이야기 2
    계정 사용자로서 저는 이중 요소 인증을 사용하거나 사용하지 않을 수 있습니다. 그러면 제가 원하는 계정 정보의 안전성을 결정할 수 있습니다.
    이것들은 결코 신기한 기능은 아니지만, 그것들은 모든 기능에서 몇 가지 임무를 가지고 있다.보통 다음 단계는 팀과 만나 사용자 이야기를 임무로 분해하고 코드를 작성하는 것이다.우리 좀 하자.우리는 간단함을 유지하기 위해 약간의 물건을 생략하거나 농축할 수도 있다.
    사용자 이야기 1 작업
  • 사용자가 관리자인지 확인
  • 권한 선택에 따라 모든 사용자를 필터링
  • 사용자를 그룹으로 삭제하는 기능 추가
  • 사용자 이야기 2 퀘스트
  • 이중 요소 설정을 업데이트하기 위한 새로운 모델 만들기
  • 이중 요소 인증이 설정되지 않은 경우 정보 보안에 대한 경고
  • 추가
    이것은 사용자 이야기에서 추출할 수 있는 작업의 대략적인 분류입니다.이제 우리는 임무를 정의했으니 테스트를 작성할 수 있다.

    재스민으로 테스트를 써요.


    이 빠른 자습서에서는 Jasmine을 사용합니다.js.그것은 매우 쉽게 배울 수 있고 대부분의 자바스크립트 프레임워크와 잘 통합되어 있다.나는 그것으로 각도를 측정하여 응용하는 것을 좋아한다.만약 당신이 Jasmine에 대한 상세한 정보를 알고 그것을 어떻게 사용하는지 알고 싶다면, 그들의 문서를 보십시오. https://jasmine.github.io/api/edge/global 우리는 모든 작업에 대한 테스트를 작성하지 않을 것입니다. 왜냐하면 이것은 당신에게 약간의 연습을 남기기 때문입니다.우리는 당신이 어떻게 테스트를 작성하는지 더 잘 이해할 수 있도록 세 개의 테스트를 작성할 것입니다.기억해라, 우리는 아직 어떤 코드도 실현하지 못했기 때문에, 너는 마음대로 호출할 수 있다.
    사용자가 관리자인지 확인
    'use strict';
    
    const testAdminUser = require('./adminUser.js');
    
    describe('make sure user is an admin', () => {
        let dummyUser = {
            username: 'testdummy',
            password: 't3StD4mM7'
        };
    
        it('check if user is logged in', () => {
            expect(testAdminUser.login(dummyUser).response.success).toBe(true); 
        });
    
        it('check if user has admin permissions', () => {
            let userPermissions = [];
            userPermissions = testAdminUser.login(dummyUser).response.permissions;
    
            expect(userPermissions.includes('Administrator')).toBe(true);
        });
    });
    
    사용자를 그룹으로 삭제하는 기능 추가
    'use strict';
    
    const testAdminUser = require('./adminUser.js');
    
    describe('functionality to remove users as a group', () => {
        let dummyPermission = 'Contributor';
    
        it('gets a list of all users marked for deletion', () => {
            expect(testAdminUser.getUsersForDeletion(dummyPermission).response).toBeDefined(); 
        });
    
        it('remove all users with the targeted permissions', () => {        
            expect(testAdminUser.deleteUsers(dummyUser).response.success).toBe(true);
        });
    
        it('check that the users have actually been removed', () => {
            let listOfUsers = testAdminUser.getUsersForDeletion(dummyPermission).response;
    
            expect(listOfUsers.length).toBeLessThan(1);
        });
    });
    
    이중 요소 설정을 업데이트하기 위한 새 모델 만들기
    'use strict';
    
    const testAdminUser = require('./adminUser.js');
    
    describe('make a new modal to update two factor settings', () => {
        let dummyUser = {
            username: 'testdummy',
            password: 't3StD4mM7'
        };
    
        it('check if new modal has been created', () => {
            expect('#two-factor-modal').toExist();
        });
    
        it('check that two factor settings have loaded with the selected value', () => {        
            expect(testAdminUser.getTwoFactorSettings(dummyUser).response).not.toBeNull();
        });
    
        it('check that changing the two factor setting updates the value for the user', () => {
            let selectedValue = false;
            let isUpdateSuccessful = testAdminUser.updateTwoFactorSettings(dummyUser).response.success;
    
            if (isUpdateSuccessful) {
                expect(testAdminUser.getTwoFactorSettings(dummyUser).response).toBe(selectedValue);
            }
        });
    });
    
    다음은 Jasmine을 사용하여 테스트를 작성하는 예들입니다. 그러나 대부분의 테스트 라이브러리는 비슷한 절차를 따릅니다.테스트할 내용을 설명하고 계획된 코드에 대한 테스트를 수행하기 위해 가상 조건을 작성할 것입니다.이것은 당신이 이 임무들을 위해 테스트를 작성하는 유일한 방법이 아니기 때문에, 만약 당신이 그것을 개선할 공간이 있다고 생각한다면, 스스로 테스트를 작성하세요.어쨌든 그것은 네가 가장 큰 이익을 얻는 곳이다.
    테스트를 쓰는 것은 결코 어렵지 않다. 단지 적응하는 데 시간이 필요할 뿐이다.보통, 임무를 받고 코드로 바로 이동할 때, 먼저 테스트를 작성하는 것은 매우 복잡한 것 같다.많은 개발자들이 아직 존재하지 않는 코드를 어떻게 테스트하는지 즉각 물었다.이것은 정확한 견해가 아니다.코드의 실현을 검사하기 위해 테스트를 작성할 필요가 없습니다.업무 측면에서 요구하는 방식으로 기능이 작동하는지 확인하기 위해 테스트를 작성하고 있습니다.
    이것이 바로 코드를 작성하기 전에 테스트를 작성할 수 있는 이유다.일단 테스트를 작성하면 기본적으로 작성해야 할 코드의 대강이 생긴다.따라서 기능 테스트를 통과하기 위해 코드를 작성해야 합니다.그리고 그것을 재구성해서 효율을 높인다.이것이 바로 TDD/BDD 프로세스의 작업 원리입니다. 요령을 터득할 때 매우 멋있습니다.
    왜 당신은 개발자가 테스트를 작성할지 안 할지에 대해 의견이 이렇게 다르다고 생각합니까?나는 소프트웨어 업계에서 20여 년을 일했고 테스트를 작성한 적이 없는 사람도 있고, 테스트가 없는 상황에서 코드를 작성하는 것을 꿈꾸지 않는 사람도 있다는 것을 안다.왜 이런 의견 차이가 있습니까?전체 테스트 작업이 상대적으로 새롭기 때문입니까, 아니면 업무 운영 방식이나 다른 원인 때문입니까?나 진짜 궁금해!
    어이!너는 트위터에서 나를 주목해야 한다. 왜냐하면:

    좋은 웹페이지 즐겨찾기