mirror of
https://github.com/tenrok/axios.git
synced 2026-06-11 18:02:32 +03:00
Adding cancellation support
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
var Cancel = axios.Cancel;
|
||||
var CancelToken = axios.CancelToken;
|
||||
|
||||
describe('cancel', function() {
|
||||
beforeEach(function() {
|
||||
jasmine.Ajax.install();
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
jasmine.Ajax.uninstall();
|
||||
});
|
||||
|
||||
describe('when called before sending request', function() {
|
||||
it('rejects Promise with a Cancel object', function (done) {
|
||||
var source = CancelToken.source();
|
||||
source.cancel('Operation has been canceled.');
|
||||
axios.get('/foo', {
|
||||
cancelToken: source.token
|
||||
}).catch(function (thrown) {
|
||||
expect(thrown).toEqual(jasmine.any(Cancel));
|
||||
expect(thrown.message).toBe('Operation has been canceled.');
|
||||
done();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('when called after request has been sent', function() {
|
||||
it('rejects Promise with a Cancel object', function (done) {
|
||||
var source = CancelToken.source();
|
||||
axios.get('/foo/bar', {
|
||||
cancelToken: source.token
|
||||
}).catch(function (thrown) {
|
||||
expect(thrown).toEqual(jasmine.any(Cancel));
|
||||
expect(thrown.message).toBe('Operation has been canceled.');
|
||||
done();
|
||||
});
|
||||
|
||||
getAjaxRequest().then(function (request) {
|
||||
// call cancel() when the request has been sent, but a response has not been received
|
||||
source.cancel('Operation has been canceled.');
|
||||
request.respondWith({
|
||||
status: 200,
|
||||
responseText: 'OK'
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('calls abort on request object', function (done) {
|
||||
var source = CancelToken.source();
|
||||
var request;
|
||||
axios.get('/foo/bar', {
|
||||
cancelToken: source.token
|
||||
}).catch(function() {
|
||||
// jasmine-ajax sets statusText to 'abort' when request.abort() is called
|
||||
expect(request.statusText).toBe('abort');
|
||||
done();
|
||||
});
|
||||
|
||||
getAjaxRequest().then(function (req) {
|
||||
// call cancel() when the request has been sent, but a response has not been received
|
||||
source.cancel();
|
||||
request = req;
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -11,7 +11,14 @@ describe('instance', function () {
|
||||
var instance = axios.create();
|
||||
|
||||
for (var prop in axios) {
|
||||
if (['Axios', 'create', 'all', 'spread', 'default'].indexOf(prop) > -1) {
|
||||
if ([
|
||||
'Axios',
|
||||
'create',
|
||||
'Cancel',
|
||||
'CancelToken',
|
||||
'all',
|
||||
'spread',
|
||||
'default'].indexOf(prop) > -1) {
|
||||
continue;
|
||||
}
|
||||
expect(typeof instance[prop]).toBe(typeof axios[prop]);
|
||||
|
||||
@@ -320,5 +320,21 @@ module.exports = {
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
testCancel: function(test) {
|
||||
var source = axios.CancelToken.source();
|
||||
server = http.createServer(function (req, res) {
|
||||
// call cancel() when the request has been sent, but a response has not been received
|
||||
source.cancel('Operation has been canceled.');
|
||||
}).listen(4444, function() {
|
||||
axios.get('http://localhost:4444/', {
|
||||
cancelToken: source.token
|
||||
}).catch(function (thrown) {
|
||||
test.ok(thrown instanceof axios.Cancel, 'Promise must be rejected with a Cancel obejct');
|
||||
test.equal(thrown.message, 'Operation has been canceled.');
|
||||
test.done();
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user