mirror of
https://github.com/tenrok/axios.git
synced 2026-06-20 20:00:40 +03:00
issue#2609 | Sasha | predictable axios requests (#2702)
* issue#2609 | Sasha | predictable axios requests
- axios requests are not delayed by pre-emptive promise creation by default
- add options to interceptors api ("synchronous" and "runWhen")
- add documentation and unit tests
* issue#2609 | Sasha | pull request feedback changes
* issue#2609 | Sasha | additional feedback changes
* issue#2609 | Sasha | put back try/catch
* issue#2609 | Sasha | add 2 adapter unit tests
- remove check for requestCancelled
Co-authored-by: ak71845 <alexandre.korotkov@kroger.com>
Co-authored-by: Xianming Zhong <chinesedfan@qq.com>
Co-authored-by: Jay <jasonsaayman@gmail.com>
This commit is contained in:
@@ -1,19 +1,98 @@
|
||||
var axios = require('../../index');
|
||||
|
||||
describe('adapter', function () {
|
||||
it('should support custom adapter', function (done) {
|
||||
var called = false;
|
||||
beforeEach(function () {
|
||||
jasmine.Ajax.install();
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
jasmine.Ajax.uninstall();
|
||||
});
|
||||
|
||||
it('should support custom adapter', function (done) {
|
||||
axios('/foo', {
|
||||
adapter: function (config) {
|
||||
called = true;
|
||||
adapter: function barAdapter(config) {
|
||||
return new Promise(function dispatchXhrRequest(resolve) {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open('GET', '/bar');
|
||||
|
||||
request.onreadystatechange = function () {
|
||||
resolve({
|
||||
config: config,
|
||||
request: request
|
||||
});
|
||||
};
|
||||
|
||||
request.send(null);
|
||||
});
|
||||
}
|
||||
}).catch(console.log);
|
||||
|
||||
getAjaxRequest().then(function(request) {
|
||||
expect(request.url).toBe('/bar');
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should execute adapter code synchronously', function (done) {
|
||||
var asyncFlag = false;
|
||||
axios('/foo', {
|
||||
adapter: function barAdapter(config) {
|
||||
return new Promise(function dispatchXhrRequest(resolve) {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open('GET', '/bar');
|
||||
|
||||
request.onreadystatechange = function () {
|
||||
resolve({
|
||||
config: config,
|
||||
request: request
|
||||
});
|
||||
};
|
||||
|
||||
expect(asyncFlag).toBe(false);
|
||||
request.send(null);
|
||||
});
|
||||
}
|
||||
}).catch(console.log);
|
||||
|
||||
asyncFlag = true;
|
||||
|
||||
getAjaxRequest().then(function() {
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
it('should execute adapter code asynchronously when interceptor is present', function (done) {
|
||||
var asyncFlag = false;
|
||||
|
||||
axios.interceptors.request.use(function (config) {
|
||||
config.headers.async = 'async it!';
|
||||
return config;
|
||||
});
|
||||
|
||||
setTimeout(function () {
|
||||
expect(called).toBe(true);
|
||||
axios('/foo', {
|
||||
adapter: function barAdapter(config) {
|
||||
return new Promise(function dispatchXhrRequest(resolve) {
|
||||
var request = new XMLHttpRequest();
|
||||
request.open('GET', '/bar');
|
||||
|
||||
request.onreadystatechange = function () {
|
||||
resolve({
|
||||
config: config,
|
||||
request: request
|
||||
});
|
||||
};
|
||||
|
||||
expect(asyncFlag).toBe(true);
|
||||
request.send(null);
|
||||
});
|
||||
}
|
||||
}).catch(console.log);
|
||||
|
||||
asyncFlag = true;
|
||||
|
||||
getAjaxRequest().then(function() {
|
||||
done();
|
||||
}, 100);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user