gpt4 book ai didi

testing - 使用 Jest 测试组件时,Promise 在 React 组件中不起作用

转载 作者:行者123 更新时间:2023-11-28 20:53:18 25 4
gpt4 key购买 nike

美好的一天。我有以下问题:我有一个项目编辑器。它是如何工作的:我按下“添加”按钮,填写一些信息,然后单击“保存”按钮。我的 React 组件中的 _onSaveClicked 函数处理单击事件和来自服务的调用函数,该函数将参数从编辑表单发送到服务器并返回 promise 。_onSaveClicked 实现

.then(response => {
console.log('I\'m in then() block.');
console.log('response', response.data);
})

函数并等待 promise 结果。它适用于实际情况。我创建了假服务并放置了它而不是真正的服务。服务的功能包括:

return Promise.resolve({data: 'test response'});

如您所见,虚假服务返回已解决的 promise ,并且 .then() block 应该会立即运行。但是 .then() block 永远不会起作用。

Jest 测试:

jest.autoMockOff();

const React = require('react');
const ReactDOM = require('react-dom');
const TestUtils = require('react-addons-test-utils');
const expect = require('expect');
const TestService = require('./service/TestService ').default;


let testService = new TestService ();

describe('TestComponent', () => {
it('correct test component', () => {
//... some initial code here
let saveButton = TestUtils.findRenderedDOMComponentWithClass(editForm, 'btn-primary');
TestUtils.Simulate.click(saveButton);
// here I should see response in my console, but I don't
});
});

React 组件保存函数:

 _onSaveClicked = (data) => {
this.context.testService.saveData(data)
.then(response => {
console.log('I\'m in then() block.');
console.log('response', response.data);
});
};

服务:

export default class TestService {
saveData = (data) => {
console.log('I\'m in services saveData function');
return Promise.resolve({data: data});
};
}

我在控制台中只看到“我在服务 saveData 函数中”。

如何让它发挥作用?我需要模仿服务器响应。

感谢您的宝贵时间。

最佳答案

您可以将您的测试组件包装在另一个组件中,例如:

class ContextInitContainer extends React.Component {

static childContextTypes = {
testService: React.PropTypes.object
};

getChildContext = () => {
return {
testService: {
saveData: (data) => {
return {
then: function(callback) {
return callback({
// here should be your response body object
})
}
}
}
}
};
};

render() {
return this.props.children;
}
}

然后:

<ContextInitContainer>
<YourTestingComponent />
</ContextInitContainer>

因此您的 promise 将立即执行。

关于testing - 使用 Jest 测试组件时,Promise 在 React 组件中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36574492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com