Node.어떻게 js에서 개인 방법을 테스트할 것인가를 고려하다

5596 단어 Node.js

개요


Node.js뿐만 아니라 각 언어에서priate 방법을 테스트할 때 정도의 차이는 있지만 노력이 필요하다.
이번엔 노드야.js에서 priate 방법을 테스트하는 데 오랜 시간이 걸렸기 때문에 필기로 남겨 두었습니다.

독자 대상

  • priate 방법은 테스트를 하고 싶지만, 귀찮아서 방치한 쪽입니다
  • 채택되지 않은 방안


    결론은 스스로 내렸지만 포장과 코드가 없어서 고민입니다.
    나는 그중에 채용된 후보자를 너에게 줄 것이다.

    리퀴어로 공예품을 만들다


    테스트 노드의 개인 (내보내지 않음) 방법
    http://nazomikan.hateblo.jp/entry/2013/04/10/032410
    vm.runInThisContext() 시 보완 사항
    https://stackoverflow.com/questions/20899863/the-module-property-is-undefined-when-using-vm-runinthiscontext
    이것은 리퀴어를 통해 내보내지 않은 것을 불러올 수 없기 때문에 리퀴어를 스스로 준비하는 방법입니다.
    나는 비슷한 느낌을 해 보았지만, 나는 잘하지 못했다.
    어쩌면 방법이 좋지 않았을지도 모르지만, 보도는 매우 낡았다.runInNewContext()의 사양이 변경되었는지 알 수 없습니다.
    테스트 코드가 지능적이어서 채택할 계획이다.
    그러나 일부 캐시 모듈을 사용하는 전제가 있기 때문에context가 분리되면 그곳의 동작에 대한 걱정이 생겨 사용하지 않습니다.

    rewire 구현


    우리는 또한 Rewire 소프트웨어 패키지를 사용하는 것을 토론했다.
    평소의 작법과 달리 좀 부정적이다.
    별로 좋아하지 않아서 진일보한 토론을 하고 자업자득이 되었다.
    나중에 아래를 봤는데 그래도 괜찮다고 생각했어요. 비밀이에요.const test123 = require('./index').__get__('test123');https://www.grzegorowski.com/jest-tests-with-rewire-plugin/

    실천


    통상과 같은 동작을 하고 싶고, 복잡한 일을 하고 싶지 않다.
    아무튼 간단하면 돼.다만, 시험 때만 퍼블릭이 되고 싶은데...조건에서 전환하면 되잖아
    생각나면 그냥 해.
    test.js
    
    const firebaseUtil = require('./firebase/util.js');
    
    test('call private method', () => {
        firebaseUtil.privateMethod();
    })
    
    
    Firebase를 호출하는util 모듈의private 방법을 테스트합니다.
    privateMethod가 내보내지지 않았기 때문에 이러다가 실행 오류가 발생할 수 있습니다.
    firebase/util.js
    
    const { getPrivateMethodsInTest } = require('../utils/testHelper'); // add code
    
    const publicMethod = () => console.log('this is public');
    const privateMethod = () => console.log('this is private');
    
    module.exports = {
        publicMethod,
        ...getPrivateMethodsInTest({ privateMethod }) // add code
    };
    
    
    util.js에는publicMethod()와privateMethod()가 있고,publicMethod는 평소대로 export를 하고,private에getPrivateMethods InTest()를 끼우는 방법이 있습니다.
    getPrivateMethodsInTest()가 중요합니다.
    utils/testHelper.js
    
    const getPrivateMethodsInTest = 
        (methods) => process.env.NODE_ENV === 'test' ? methods : {};
    
    module.exports = { getPrivateMethodsInTest };
    
    
    jest 상황에서 테스트 실행 시 프로세스를 진행합니다.env.NODE_ENV에'test'가 있기 때문에 전달된 방법을 직접 되돌리거나 빈 대상을 되돌리거나 간단한 방법을 전환하면 됩니다.
    호출자에서 이 반환값을 펼치면 테스트할 때private 방법을 내보냅니다. 그렇지 않으면public 방법만 내보냅니다.
    이 방안의 장점은 테스트를 할 때 일반적인public 방법이기 때문에 고장을 걱정할 필요가 없다는 것이다.
    간단하다고 생각하지만 대상이 되는 소스가 많아지면 귀찮을 수도 있어요.
    이런 상황에서 리와이어를 채택하는 것이 가장 좋다.

    좋은 웹페이지 즐겨찾기