我有一个继承的项目,在重构之前要编写大量测试,并且在测试回调时遇到了麻烦。
static createNew(data) {
ApiActions.post(
'/api/projects',
data,
(err, response) => {
// this is the callback I want to test gets triggered
if (!err) {
this.hideCreateNew();
}
}
);
}
ApiActions只是构建并执行ajax请求,第三个参数是回调。
到目前为止我的测试:
import ApiActions from '@helpers/api';
jest.mock('@helpers/api');
...
it('should createNew', () => {
const callback = jest.fn((cb) => cb());
Actions.createNew({ data: [] }, callback);
expect(ApiActions.post).toHaveBeenCalledWith(
'/api/projects',
{ data: [] },
expect.any(Function)
);
expect(callback).toHaveBeenCalled();
});
答案 0 :(得分:0)
您可以通过将createNew
中的回调因素分解为一个单独的函数并将其用作默认回调,来重构代码,使其更具可测试性,但也可以传递其他回调。
我认为应该是这样的(可能有一点错误,但是应该可以说明这个想法):
static createCallback(err, response) {
if (!err) {
this.hideCreateNew();
}
}
static createNew(data, callback) {
// default to createCallback
callback = callback || createCallback;
ApiActions.post(
'/api/projects',
data,
callback
);
}
现在,您可以独立测试createNew
和createCallback
的行为是否符合预期。