我有一个反应组件。比方说 Todo
import React, { Component } from 'react';
import injectSheet from 'react-jss';
class Todo extends Component {
// methods that incl. state manipulation
render() {
const { classes } = this.props;
return (
<div className={classes.container}>
<WhateverElse />
</div>
);
}
}
export default injectSheet(Todo);
我想用酶测试它。它有两个问题。
1. 访问状态 (和其他组件特定功能)
当我shallow
或mount
套件中的那个作曲家时,我当然无法访问它的状态,因为它不再是我的组件,而是围绕它的一些新东西。
例如,这段代码会给我一个错误:
it('should have state updated on handleAddTodo', () => {
const todo = shallow(<Todo />);
const length = todo.state('todos').length;
});
它说当然TypeError: Cannot read property 'length' of undefined
是因为状态不是我所期望的,但这是:{ theme: {}, dynamicSheet: undefined }
这也不会让我访问props
等refs
。
2. 主题提供者的问题
要为项目提供一些默认颜色,如下所示:
import React, { Component } from 'react';
import Colors from './whatever/Colors';
class App extends Component {
render() {
return (
<ThemeProvider theme={Colors}>
<WhateverInside />
</ThemeProvider>
);
}
}
当然,在运行测试时它会给我一个错误[undefined] Please use ThemeProvider to be able to use WithTheme
。
所以我的问题如下。有没有办法在“一个地方”解决这个问题。我怎样才能让酶不知道我的组件是用什么包裹的?
如果没有,那么如果将 ThemeProvider 功能传递给我正在测试的组件,我该如何解决这个问题?以及如何访问被包装组件的 state、ref、props 和其他东西?
谢谢!