Javascript 开玩笑地测试回调
我继承了一个项目,在重构它之前,我正在编写一系列测试,在测试回调时遇到了麻烦Javascript 开玩笑地测试回调,javascript,callback,jestjs,Javascript,Callback,Jestjs,我继承了一个项目,在重构它之前,我正在编写一系列测试,在测试回调时遇到了麻烦 static createNew(data) { ApiActions.post( '/api/projects', data, (err, response) => { // this is the callback I want to test gets triggered if (
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请求,第三个参数是回调
static createNew(data) {
ApiActions.post(
'/api/projects',
data,
(err, response) => {
// this is the callback I want to test gets triggered
if (!err) {
this.hideCreateNew();
}
}
);
}
我目前的测试:
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();
});
通过将
createNew
中的回调分解为一个单独的函数,并将其用作默认回调,您可以重构代码,使其更易于测试,但也允许传入其他回调
我认为应该是这样的(可能有点错误,但应该说明这个想法):
现在,您可以独立测试
createNew
和createCallback
的行为是否符合预期。您可以重构代码,将createNew
中的回调分解为单独的函数,并将其用作默认回调,从而使代码更易于测试,但也允许传入其他回调
我认为应该是这样的(可能有点错误,但应该说明这个想法):
现在您可以独立地测试代码是否>代码> >代码> CealCeCalBue<代码>独立于行为是否符合预期。
我确实考虑过这一点,但是这种函数的样式出现了多次,所有回调都做了不同的事情,所以不容易有一个普通的。你可以强制通过一个考试。如果ApiActions
请求代码足够大,可以对单个函数进行抽象,并需要回调来具体处理响应。它高度依赖于上下文,需要一定程度的品味。我并不是说我的解决方案是正确的,在你的情况下我不可能知道。我确实考虑过这个问题,但是这个函数的样式出现了多次,所有回调都做了不同的事情,所以不容易有一个普通的。我不认为有一个普通的回调是不必要的。你可以强制通过一个考试。如果ApiActions
请求代码足够大,可以对单个函数进行抽象,并需要回调来具体处理响应。它高度依赖于上下文,需要一定程度的品味。我不是说我的解决方案是正确的,我不可能知道你的情况。