JSS 컴포넌트 캡슐화 때문에 Jest로 내 React 컴포넌트를 테스트하는 데 조금 어려움을 겪고 있습니다.Jest/Enzyme을 사용하여 JSS 스타일 캡슐화로 반응 성분을 테스트하는 방법?
의사 코드 예제 :
JSS (style.js
) :
export default {
pinkOnYellow: {
color: 'pink',
backgroundColor: 'yellow'
}
}
구성 요소에게 반작용
import { withStyles } from 'material-ui/styles'
import compose from 'recompose/compose'
import classes from './style.js'
const MyComponent = ({classes}) =>{
<div className={classes.pinkOnYellow} />
}
export default compose(withStyles(style))(MyComponent)
구성 요소는 classes
객체가 어느 정도 같은 모양 인스턴스화하는 경우 :
{pinkOnYellow: 'MyComponent-pinkOnYellow-32423'}
따라서 구성 요소 HTML 내가 매핑 된 어떤 클래스 이름을 알 수 없기 때문에 농담/효소 시험은 내가 쉽게 클래스 선택기를 사용할 수 없습니다 작성할 때 의미
<div class="MyComponent-pinkOnYellow-32423" />
처럼 보일 것입니다. 나는 몇 가지 해결책을 발견하고 슈퍼의 규제이기 때문에 나는 모두 불행 해요 :
1
it('should be shallow as my soul',() => {
const imageGallery = shallow(<ImageGallery images={images} />)
expect(timageGallery.find('[class^=pinkOnYellow]')).toBe(1)
})
2 (얕은 작동하지 않습니다)
function getClassesByEnzymeInstance(instance, className) {
const componentName = instance.name()
const classNameMapped = `.${instance.find(componentName).props('classes').classes[className]}`
return classNameMapped
}
it('should be not as shallow',() => {
const imageGallery = mount(<ImageGallery images={images} />)
const mappedClassName = getClassesByEnzymeInstance(ImageGallery, 'pinkOnYellow')
expect(timageGallery.find(mappedClassName)).toBe(1)
})
3 일 것입니다 아마도 이라는 객체를 Proxy
에 넣으십시오. 환경 변수가 테스트 일 때 값 대신 키를 반환하지만 해커처럼 보이고 피하고 싶은 환경에 따라 구성 요소가 달라지게됩니다.
내가 언급했듯이 두 솔루션 모두 매우 제한적이므로 올바른 방향으로 나를 안내 할 수있는 조언이나 조언을 부탁드립니다.