美好的一天。我有以下问题: 我有一个项目编辑器。 工作原理:我推动添加'按钮,填写一些信息,点击“保存”。按钮。 我的react组件中的_onSaveClicked函数处理来自服务的click事件和调用函数,它从编辑表单向服务器发送params并返回promise。 _onSaveClicked实现
.then(response => {
console.log('I\'m in then() block.');
console.log('response', response.data);
})
功能并等待承诺结果。它适用于实际情况。 我创建了假服务并将其放置而不是真正的服务。 服务的功能包括:
return Promise.resolve({data: 'test response'});
正如你所看到的假服务返回已解决的承诺和.then()块应该立即工作。但是.then()块永远不会起作用。
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});
};
}
我只看到"我在服务中保存了数据功能"在我的控制台中。
如何使它有效?我需要模仿服务器响应。
感谢您的时间。
答案 0 :(得分:0)
您可以将测试组件包装在另一个组件中,如:
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>
所以你的承诺将立即执行。