2016-10-27 1 views
1

내 JavaScript에서 유형에 주석을 달기 위해 flowtype을 사용하고 있습니다. 내 테스트에서 나는 또한 flowtype을 이용하고 싶다.flowtype이있는 유형으로 구현 된 모의 반을 캐스팅 할 수 있습니까?

나는 함수에 다른 함수를 가진 객체 인 인자가 주어졌으며,이 다른 함수는 예상 인자와 함께 올바른 횟수만큼 호출된다.

예제 코드 :

function foo(obj: Bar) { 
    obj.bar('bar'); 
} 

예 시험 :

test('foo gets bar', t => { 
    const mockBar: Bar = { 
     bar: sinon.stub(), 
    }; 
    foo(mockBar); 
    t.true(mockBar.bar.calledWith('bar')); 
}); 

이제 Bar는 속성과 같은 많은 정말 복잡한 유형이 완전히 조롱하는 것은 쉽지 않다 여기 난 단지 원하는 테스트는 'bar'입니다. Flowtype은 내 mockBar이 실제로는 Bar이 아니며 테스트 또는 모의에 flowtype을 사용하지 않는 것보다이 시점에서해야 할 일이 무엇인지 완전히 모른다고 말하면서이 작업과 오류 중 아무 것도 수행하지 않습니다. 약간의 시험을 위해.

나는 어쨌든 모의 캐스트를 강제로 바가 될 수있는 방식으로 바에 강제로 적용 할 수 있습니까?

답변

6

사실, 난 더 나은 솔루션을 발견 할 수 있습니다.

// Upcast mockBar to any then downcast any to Bar. 
// Unsafe downcasting from any is allowed: OK 
((mockBar: any): Bar); 

위 식의 형식은 Bar입니다.

출처 : https://flowtype.org/blog/2015/02/18/Typecasts.html

이 방법의 장점은 타입 캐스팅 오류가 무시한다는 것이다. 예 : 존재하지 않는 변수는 여전히 감지됩니다.

+0

감사합니다. 다음과 같이 전달해야합니다 :'foo (((mockBar : any) : Bar)))'; –

0

Flow의 오류 억제 설명을 사용하여 오류를 무시할 수 있습니다. 댓글 패턴을 .flowconfig에 정의해야합니다. docs에서

:

suppress_comment (정규식) : 다음 줄에 어떤 흐름 오류를 억제하는 마법의 코멘트를 정의합니다. 예를 들어 :

suppress_comment= \\(.\\|\n\\)*\\$FlowFixMe

이 같은 의견을 일치 :

// $FlowFixMe: suppressing this error until we can refactor 
var x : string = 123; 
+0

만약 내가 이것을했다면 나는 테스트에서 흐름을 사용하지 않을 수도 있습니다. 나는 던지기를 정말로 바랬다. –

+1

@BjornTipling 모든 변수를'(myVar : Type)'과 같은 유형으로 변환 할 수 있습니다. 그러나 예제에서 새 변수를 정의하고 있으므로 캐스트 할 필요가 없습니다. 원하는 유형을 지정할 수 있습니다. 필요한 필드를 구현하지 않으므로 캐스팅과 원하는 작업 모두 유형 검사에 실패합니다. 따라서 작동 시키려면 해당 캐스트 또는 선언에 대한 형식 검사를 해제해야합니다. 이렇게 할 수있는 언어 기능은 효과적으로 유형 시스템 오류를 억제합니다. 오류 억제 주석은 한 행의 오류 만 묵음으로 처리합니다. – Nikita

관련 문제