Merge branch 'dev' into next

This commit is contained in:
chenjiahan
2020-09-02 15:32:31 +08:00
7 changed files with 112 additions and 28 deletions
+27
View File
@@ -0,0 +1,27 @@
import { isPromise, noop } from '.';
export function callInterceptor(options: {
interceptor?: (...args: any[]) => Promise<boolean> | boolean;
done: () => void;
args: any[];
}) {
const { interceptor, args, done } = options;
if (interceptor) {
const returnVal = interceptor(...args);
if (isPromise(returnVal)) {
returnVal
.then((value) => {
if (value) {
done();
}
})
.catch(noop);
} else if (returnVal) {
done();
}
} else {
done();
}
}
+50
View File
@@ -0,0 +1,50 @@
import { later } from '../../../test';
import { callInterceptor } from '../interceptor';
test('#callInterceptor', async () => {
const done = jest.fn();
callInterceptor({ done });
expect(done).toHaveBeenCalledTimes(1);
callInterceptor({
interceptor: () => false,
done,
});
expect(done).toHaveBeenCalledTimes(1);
callInterceptor({
interceptor: () => true,
done,
});
expect(done).toHaveBeenCalledTimes(2);
callInterceptor({
interceptor: () => Promise.resolve(false),
done,
});
await later();
expect(done).toHaveBeenCalledTimes(2);
callInterceptor({
interceptor: () => Promise.resolve(true),
done,
});
await later();
expect(done).toHaveBeenCalledTimes(3);
callInterceptor({
interceptor: () => Promise.reject(),
done,
});
await later();
expect(done).toHaveBeenCalledTimes(3);
callInterceptor({
interceptor: (...args) => {
expect(args).toEqual(['foo']);
},
args: ['foo'],
done,
});
expect(done).toHaveBeenCalledTimes(3);
});