包装:Jest,Enzyme,(和Nock不起作用)。
我有以下React组件:
network_billing <- data.frame( Billing_tree$Source, Billing_tree$Target)
net_billing <- graph_from_data_frame(d=network_billing)
library(cluster)
clusters1 <- clusters(net_billing)$csize
clusters1 <- as.data.frame(clusters1)
我正在尝试为此实现单元测试,因此我想根据结果(import ...
const request = require('request-promise-native');
class SomeSearchContainer extends Component {
constructor(props) {
super(props);
this.state = {
...
};
};
onResponse = (response) => {
const { var1, var2 } = response;
if (var1) {
this.setState(...)
}
};
onSubmit = (event) => {
const someId = this.props.someId;
if (someId.length === 4) {
request(
{
uri: `${location.href}api/${someId}`,
json: true,
}).then(this.onResponse)
.catch(this.props.onResponseError);
} else {
this.setState(...)
}
};
render() {
return (
<button id="btn-search" onClick={this.onSubmit}>Search</button>
);
}
}
export default SomeSearchContainer;
)模拟请求 - promise-native和assert
相应更改的阶段。 / p>
理想情况下,我想浅显示组件,模拟点击事件并声明状态已更改(相应地)。
我尝试了各种各样的方法但是我的测试没有等待回来的请求,或者我没有真正模拟请求。
你能告诉我吗?
答案 0 :(得分:0)
根据this example from the docs,我想想你可能想做类似的事情:
首先,在__mocks__/request-promise-native.js
创建一个文件,该文件将模拟您的请求将返回的一些示例数据。这看起来像是:
// __mocks__/request-promise-native.js
const rpn = jest.genMockFromModule('request-promise-native');
const request = opts => new Promise((resolve, reject) => {
resolve(`{
var1: true,
var2: "foo"
}`);
});
rpn.request = request;
module.exports = rpn;
请注意,__mocks__
文件夹需要进入项目的根目录,与node_modules
位于同一目录中。
然后您可以像编写任何其他React组件一样编写和运行测试。当测试执行到达通常使用request-promise-native
库的部分时,您的模拟版本将自动交换,response
变量将获得您在模拟中设置的任何JSON值。
如果您想要稍微复杂的行为,请参阅上面的文档,例如:如果你也想测试reject()
的情况。在这种情况下,您可能希望分支opts
参数中传递的任何内容,以选择是执行resolve()
还是reject()
。