提交 9ede644b 编写于 作者: M Matt Zabriskie

Better tests for btoa

上级 77b8966b
var axios = require('../../index');
module.exports = function setupBasicAuthTest() {
beforeEach(function () {
jasmine.Ajax.install();
});
afterEach(function () {
jasmine.Ajax.uninstall();
});
it('should accept HTTP Basic auth with username/password', function (done) {
axios({
url: '/foo',
auth: {
username: 'Aladdin',
password: 'open sesame'
}
});
setTimeout(function () {
var request = jasmine.Ajax.requests.mostRecent();
expect(request.requestHeaders['Authorization']).toEqual('Basic: QWxhZGRpbjpvcGVuIHNlc2FtZQ==');
done();
}, 0);
});
it('should fail to encode HTTP Basic auth credentials with non-Latin1 characters', function (done) {
axios({
url: '/foo',
auth: {
username: 'Aladßç£☃din',
password: 'open sesame'
}
}).then(function(response) {
done(new Error('Should not succeed to make a HTTP Basic auth request with non-latin1 chars in credentials.'));
}).catch(function(error) {
expect(error.message).toEqual('INVALID_CHARACTER_ERR: DOM Exception 5');
done();
});
});
};
var axios = require('../../index');
var setupBasicAuthTest = require('./__setupBasicAuthTest');
describe('basicAuth without btoa polyfill', function () {
beforeEach(function () {
jasmine.Ajax.install();
});
afterEach(function () {
jasmine.Ajax.uninstall();
});
it('should accept HTTP Basic auth with username/password', function (done) {
axios({
url: '/foo',
auth: {
username: 'Aladdin',
password: 'open sesame'
}
});
setTimeout(function () {
var request = jasmine.Ajax.requests.mostRecent();
expect(request.requestHeaders['Authorization']).toEqual('Basic: QWxhZGRpbjpvcGVuIHNlc2FtZQ==');
done();
}, 0);
});
it('should fail to encode HTTP Basic auth credentials with non-Latin1 characters', function (done) {
axios({
url: '/foo',
auth: {
username: 'Aladßç£☃din',
password: 'open sesame'
}
}).then(function(response) {
done(new Error('Should not succeed to make a HTTP Basic auth request with non-latin1 chars in credentials.'))
}).catch(function(error) {
expect(error.message).toEqual('INVALID_CHARACTER_ERR: DOM Exception 5')
done()
});
});
setupBasicAuthTest();
});
var axios = require('../../index');
var setupBasicAuthTest = require('./__setupBasicAuthTest');
var window_btoa;
describe('basicAuth with btoa polyfill', function () {
beforeAll(function() {
this.original_btoa = window.btoa;
window_btoa = window.btoa;
window.btoa = undefined;
})
afterAll(function() {
window.btoa = this.original_btoa;
})
beforeEach(function () {
jasmine.Ajax.install();
});
afterEach(function () {
jasmine.Ajax.uninstall();
afterAll(function() {
window.btoa = window_btoa;
window_btoa = undefined;
});
it('should accept HTTP Basic auth with username/password', function (done) {
axios({
url: '/foo',
auth: {
username: 'Aladdin',
password: 'open sesame'
}
});
setTimeout(function () {
var request = jasmine.Ajax.requests.mostRecent();
expect(request.requestHeaders['Authorization']).toEqual('Basic: QWxhZGRpbjpvcGVuIHNlc2FtZQ==');
done();
}, 0);
it('should not have native window.btoa', function () {
expect(window.btoa).toEqual(undefined);
});
it('should fail to encode HTTP Basic auth credentials with non-Latin1 characters', function (done) {
axios({
url: '/foo',
auth: {
username: 'Aladßç£☃din',
password: 'open sesame'
}
}).then(function(response) {
done(new Error('Should not succeed to make a HTTP Basic auth request with non-latin1 chars in credentials.'))
}).catch(function(error) {
expect(error.message).toEqual('\'btoa\' failed: The string to be encoded contains characters outside of the Latin1 range.')
done()
});
});
setupBasicAuthTest();
});
var __btoa = require('../../../lib/helpers/btoa');
describe('btoa polyfill', function () {
it('should behave the same as native window.btoa', function () {
var data = 'Hello, world';
expect(__btoa(data)).toEqual(window.btoa(data));
});
it('should throw an error if char is out of range 0xFF', function () {
var err1, err2;
var data = 'I ♡ Unicode!';
try {
window.btoa(data);
} catch (e) {
err1 = e;
}
try {
__btoa(data);
} catch (e) {
err2 = e;
}
expect(err1.message).toEqual(err2.message);
});
});
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册