2014-09-20 2 views
2

여러 Flux 매장에 대한 단위 테스트를 작성 중이며 약간의 성가신 문제가 발생했습니다.플럭스 저장소 - 단위 테스트

내 상점은 일반적으로 다음과 같이 내장되어 있습니다 :

storeObj = { 
... 
} 

_secretsetterfunction = function(){} 

module.exports storeObj 

당신이 볼 수 있듯이 세터 기능은 저장소 개체의 외부에 있기 때문에, - 그것은 직접 액세스 할 수 없습니다.

저장소 데이터를 테스트/조작하는 유일한 방법은 Action -> Dispatcher -> 이벤트 리스너 (기술적으로 잘라낼 수 있음)를 통과하는 것이므로 문제가됩니다. 상점을 테스트 할 때 단위 테스트.

대안은 저장소 개체에 setter 메서드를 실제로 넣는 것입니다.하지만이 작업은 실제로 수행하고 싶은 작업이 아닙니다.

의견이 있으십니까?

답변

2

조치는 실제로 상점의 공개 API입니다. 상점을 완전히 테스트하기 위해 조치의 영향을 확인하기 만하면됩니다.

+0

을 사용하고, 분명히 효과가 있습니다. 그러나 waitFor() 명령을 사용하면 특히 복잡해집니다. –

+0

사실, 실제로는 매우 간단합니다. 모든 테스트에 타임 아웃을 설정하고 작업을 호출하면 저장소의 변경 이벤트를 기다리고 페이로드의 유효성을 검사하기 만하면됩니다. 더 간단한 방법은 없습니다. 나는 재스민 위에 모카를 추천한다. .. 그것은 afaik 물건의이 종류를 위해 더 좋은 지원을 가지고있다. – FakeRainBrigand

+0

React stores 간의 의존성은 그리 좋은 생각이라고 생각하지 않습니다. CQRS/EventSourcing의 원칙을 사용하면 테스트 가능성을 높이고 대규모 팀에서 더 효과적으로 확장 할 수 있습니다. 또한 http://stackoverflow.com/a/25806145/82609 –

4

나는 재스민를 사용하여도이 문제를 가지고 있었다.

은 당신이 농담 사용하지 않을 때 그 개인의 내부 기능에 대한 참조를 가져하는 방법에 대한 블로그 게시물 & 예 REPO를 썼다 : http://bensmithett.com/testing-flux-stores-without-jest/

TL을, DR을 - 나는 것을 얻을 rewire

+0

감사합니다. 농담 방법 –

+0

@ 벤, 좋은 글. 모든 것이 아주 명확 해집니다! – cnp