EmberJS + sinon을 사용한 좋은 어설션 메시지

테스트에서 좋은 어설션 메시지는 테스트가 빨간색이 되는 경우 무엇이 잘못되었는지 신속하게 파악하는 데 도움이 됩니다. 반면에 잘못된 어설션 메시지는 ...



설정이 다른 꽤 많은 프로젝트EmberJS를 작업하기 때문에 옵션을 문서화하는 것이 좋을 것이라고 생각했습니다.

초기 설정


sinon 프로젝트에서 EmberJS 의 경우 ember-sinon-qunit 을 설치하고 싶을 것입니다. 이렇게 하면 자동으로 ember-sinon 가져옵니다.

어설션



일부sinon 사용법이 있는 다음 테스트 코드를 가정해 보겠습니다.

import sinon from 'sinon';

test('my awesome test', function (assert) {
  const stub = sinon.stub().named('Awesome spy').returns('hello');

  stub('First call');
  stub('Second call');

  // Place for future assertions
});


큐유닛



기본적으로 qunit 모든 ember-cli 프로젝트에서 사용할 수 있는 assert 기능을 has quite a few methods 제공합니다. 그런 다음 이를 사용하여 sinon 객체가 경험한 것을 검사할 수 있습니다.

assert.ok(spy.calledOnce);


다음 오류가 발생합니다.



그것은 ... 차선책입니다. 이 메시지는 실패한 이유에 대한 컨텍스트를 제공하지 않습니다. 함수가 정확히 한 번 호출될 것으로 예상했습니다.

물론 다음과 같이 할 수 있습니다.

assert.ok(stub.calledOnce, 'Expected to be called only once');


그러면 더 좋은 오류가 발생합니다.



그러나 이것은:
  • 추가 작업
  • 향후 리팩토링 오류가 발생하기 쉬움

  • 더 잘할 수 있을까요?

    불씨



    ember-sinon 패키지 덕분에 sinon를 테스트에 직접 가져올 수 있습니다.

    sinon.assert.calledOnce(stub);
    


    다음과 같은 약간 더 유익한 오류 메시지를 제공합니다.



    이것은 우리에게 더 많은 맥락을 제공하기 때문에 더 좋지만:
  • 하나의 어설션이 실패하면 다른 어설션이 실행되지 않고 테스트가 중단됩니다. 잠재적으로 중요한 정보를 숨길 수 있습니다.
  • 어설션 전달은 어설션 수에 포함되지 않으므로 이것이 test 의 유일한 유형인 경우 Expected at least one assertion, but none were run - call expect(0) to accept zero assertions. 오류가 발생합니다.
  • 위의 사항으로 인해 다른 유형의 어설션이 있는 경우 어떤 메시지가 어떤 어설션에 속하는지 알기가 혼란스러울 수 있습니다.

  • 더 잘할 수 있을까요?

    qunit-sinon-assertions



    Addonqunit-sinon-assertions은 이전 방법의 단점을 정확히 해결하기 위해 만들어졌습니다. 따라서 이 코드는 다음과 같습니다.

    assert
      .spy(stub)
      .calledOnce()
      .calledWith(['John Doe'])
      .returnedWith('world');
    


    다음과 같은 오류가 발생합니다.



    결론



    이해하기 쉬운 주장 메시지가 중요하다고 생각합니다. 이를 달성하기 위한 다양한 방법이 있습니다. 개인적으로 저는 코드를 적게 작성하고 도구에서 제공하는 규칙에 의존하는 것을 선호합니다.


    사진 제공 Miguel Á. Padriñán

    좋은 웹페이지 즐겨찾기