439 lines
11 KiB
JavaScript
439 lines
11 KiB
JavaScript
(function(qunit, $) {
|
|
'use strict';
|
|
|
|
var t = qunit.test;
|
|
|
|
/* ------------------------------------ */
|
|
qunit.module( 'Miscellaneous Bug Tests' );
|
|
/* ------------------------------------ */
|
|
|
|
t('Test bug fix for $.mockjaxSettings', function(assert) {
|
|
var done = assert.async();
|
|
|
|
$.mockjaxSettings.headers = {
|
|
'content-type': 'text/plain',
|
|
etag: 'IJF@H#@923uf8023hFO@I#H#'
|
|
};
|
|
|
|
$.mockjax({
|
|
url: '/get/property',
|
|
type: 'GET',
|
|
response: function() {
|
|
this.responseText = { foo: 'bar' };
|
|
}
|
|
});
|
|
|
|
$.ajax({
|
|
url: '/get/property',
|
|
success: function() {
|
|
assert.deepEqual( $.mockjaxSettings.headers, {
|
|
'content-type': 'text/plain',
|
|
etag: 'IJF@H#@923uf8023hFO@I#H#'
|
|
}, 'Should not change the default headers.');
|
|
},
|
|
complete: done
|
|
});
|
|
});
|
|
|
|
t('Preserve responseText inside a response function when using jsonp and a success callback', function(assert) {
|
|
var done = assert.async();
|
|
|
|
$.mockjax({
|
|
url: 'http://some/fake/jsonp/endpoint',
|
|
// The following line works...
|
|
// responseText: [{ 'data' : 'JSONP is cool' }]
|
|
// But doesn't not work when setting this.responseText in response
|
|
response: function() {
|
|
this.responseText = [{ 'data' : 'JSONP is cool' }];
|
|
}
|
|
});
|
|
|
|
$.ajax({
|
|
url: 'http://some/fake/jsonp/endpoint',
|
|
dataType: 'jsonp',
|
|
success: function(data) {
|
|
assert.deepEqual(data, [{ 'data' : 'JSONP is cool' }]);
|
|
done();
|
|
}
|
|
});
|
|
});
|
|
|
|
t('Custom status when using proxy', function(assert) {
|
|
var done = assert.async();
|
|
|
|
$.mockjax({
|
|
url: '/response-callback',
|
|
status: 409,
|
|
proxy: 'test_proxy.json'
|
|
});
|
|
|
|
$.ajax({
|
|
url: '/response-callback',
|
|
error: function() { assert.ok(true, 'error callback was called'); },
|
|
success: function() {
|
|
assert.ok( false, 'Success should not be called' );
|
|
},
|
|
complete: function(xhr) {
|
|
assert.equal(xhr.status, 409, 'response status matches');
|
|
done();
|
|
}
|
|
});
|
|
});
|
|
|
|
t('Call onAfterSuccess after success has been called', function(assert) {
|
|
var done = assert.async();
|
|
|
|
var onAfterSuccessCalled = false;
|
|
var successCalled = false;
|
|
$.mockjax({
|
|
url: '/response-callback',
|
|
onAfterSuccess: function() {
|
|
onAfterSuccessCalled = true;
|
|
assert.equal(successCalled, true, 'success was not yet called');
|
|
}
|
|
});
|
|
|
|
$.ajax({
|
|
url: '/response-callback',
|
|
success: function() {
|
|
successCalled = true;
|
|
}
|
|
});
|
|
|
|
setTimeout(function() {
|
|
assert.equal(onAfterSuccessCalled, true, 'onAfterSuccess was not called');
|
|
done();
|
|
}, 100);
|
|
});
|
|
|
|
t('Call onAfterError after error has been called', function(assert) {
|
|
var done = assert.async();
|
|
|
|
var onAfterErrorCalled = false;
|
|
var errorCalled = false;
|
|
$.mockjax({
|
|
url: '/response-callback-bad',
|
|
status: 500,
|
|
onAfterError: function() {
|
|
onAfterErrorCalled = true;
|
|
assert.equal(errorCalled, true, 'error was not yet called');
|
|
}
|
|
});
|
|
|
|
$.ajax({
|
|
url: '/response-callback-bad',
|
|
error: function() {
|
|
errorCalled = true;
|
|
}
|
|
});
|
|
|
|
setTimeout(function() {
|
|
assert.equal(onAfterErrorCalled, true, 'onAfterError was not called');
|
|
done();
|
|
}, 100);
|
|
});
|
|
|
|
t('Call onAfterComplete after complete has been called', function(assert) {
|
|
var done = assert.async();
|
|
|
|
var onAfterCompleteCalled = false;
|
|
var completeCalled = false;
|
|
$.mockjax({
|
|
url: '/response-callback',
|
|
onAfterComplete: function() {
|
|
onAfterCompleteCalled = true;
|
|
assert.equal(completeCalled, true, 'complete was not yet called');
|
|
}
|
|
});
|
|
|
|
$.ajax({
|
|
url: '/response-callback',
|
|
complete: function() {
|
|
completeCalled = true;
|
|
}
|
|
});
|
|
|
|
setTimeout(function() {
|
|
assert.equal(onAfterCompleteCalled, true, 'onAfterComplete was not called');
|
|
done();
|
|
}, 100);
|
|
});
|
|
|
|
t('Bug #95: undefined responseText on success', function(assert) {
|
|
assert.expect(2);
|
|
|
|
var expected = { status: 'success', fortune: 'Are you a turtle?' };
|
|
|
|
$.mockjax({
|
|
url: 'test/something',
|
|
responseText: { status: 'success', fortune: 'Are you a turtle?' }
|
|
});
|
|
|
|
$.ajax({
|
|
type: 'GET',
|
|
url: 'test/something',
|
|
async: false,
|
|
success: function(data) {
|
|
// Before jQuery 1.5 the response is a stringified version of the
|
|
// json data unless the 'dataType' option is set to "json"
|
|
var expectedResult = expected;
|
|
if (qunit.compareSemver($().jquery, '1.5', '<')) {
|
|
expectedResult = JSON.stringify(expected);
|
|
}
|
|
assert.deepEqual(data, expectedResult, 'responseText is correct JSON object');
|
|
}
|
|
});
|
|
|
|
$.ajax({
|
|
type: 'GET',
|
|
url: 'test/something',
|
|
dataType: 'json',
|
|
async: false,
|
|
success: function(data) {
|
|
assert.deepEqual(data, expected, 'responseText is correct JSON object');
|
|
}
|
|
});
|
|
});
|
|
|
|
t('alias type to method', function(assert) {
|
|
var done = assert.async();
|
|
|
|
$.mockjax(function(settings) {
|
|
if (settings.url === '/get/property') {
|
|
assert.equal(settings.type, settings.method);
|
|
|
|
return {
|
|
responseText: { status: 'success', fortune: 'Are you a ninja?' }
|
|
};
|
|
}
|
|
|
|
return false;
|
|
});
|
|
|
|
$.ajax({
|
|
url: '/get/property',
|
|
type: 'GET',
|
|
complete: function() {
|
|
$.ajax({
|
|
url: '/get/property',
|
|
method: 'POST',
|
|
complete: done
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
t('Bug #26: jsonp mock fails with remote URL and proxy', function(assert) {
|
|
var done = assert.async();
|
|
|
|
$.mockjax({
|
|
url: 'http://example.com/jsonp*',
|
|
contentType: 'text/json',
|
|
proxy: 'test_jsonp.js'
|
|
});
|
|
var callbackExecuted = false;
|
|
window.abcdef123456 = function(json) {
|
|
callbackExecuted = true;
|
|
assert.deepEqual(json, { 'data' : 'JSONP is cool' }, 'The proxied data is correct');
|
|
};
|
|
|
|
$.ajax({
|
|
url: 'http://example.com/jsonp?callback=?',
|
|
jsonpCallback: 'abcdef123456',
|
|
dataType: 'jsonp',
|
|
error: qunit.noErrorCallbackExpected,
|
|
complete: function(xhr) {
|
|
assert.ok(callbackExecuted, 'The jsonp callback was executed');
|
|
assert.equal(xhr.statusText, 'success', 'Response was successful');
|
|
window.abcdef123456 = null;
|
|
done();
|
|
}
|
|
});
|
|
});
|
|
|
|
t('Bug #254: subsequent timeouts', function(assert) {
|
|
var done = assert.async();
|
|
|
|
$.mockjax({
|
|
url: '/timeout-check',
|
|
responseTime: 20,
|
|
isTimeout: true,
|
|
responseText: 'foobar'
|
|
});
|
|
|
|
$.ajax({
|
|
url: '/timeout-check',
|
|
error: function(xhr, textStatus, errorThrown ) {
|
|
assert.equal( textStatus, 'timeout', 'Text status on call #1 is equal to timeout' );
|
|
assert.ok( errorThrown !== 'OK', 'errorThrown is not "OK" on call #1' );
|
|
},
|
|
success: function() {
|
|
assert.ok(false, 'call #1 should not be successful');
|
|
},
|
|
complete: function() {
|
|
// do a second call and ensure we still timeout
|
|
$.ajax({
|
|
url: '/timeout-check',
|
|
error: function(xhr, textStatus, errorThrown ) {
|
|
assert.equal( textStatus, 'timeout', 'Text status on call #2 is equal to timeout' );
|
|
assert.ok( errorThrown !== 'OK', 'errorThrown is not "OK" on call #2' );
|
|
},
|
|
success: function() {
|
|
assert.ok(false, 'call #2 should not be be successful');
|
|
},
|
|
complete: done
|
|
});
|
|
}
|
|
});
|
|
});
|
|
|
|
t('Bug #136: cross domain script requests - GET', function(assert) {
|
|
var done = assert.async();
|
|
|
|
$.mockjax({
|
|
type: 'GET',
|
|
url: 'http://jquery-mockjax-foobar.com/somefile.js',
|
|
responseText: '(window.mockjaxCrossDomain=true)'
|
|
});
|
|
|
|
$.ajax({
|
|
type: 'GET',
|
|
dataType: 'script',
|
|
url: 'http://jquery-mockjax-foobar.com/somefile.js',
|
|
error: qunit.noErrorCallbackExpected,
|
|
success: function() {
|
|
assert.strictEqual(window.mockjaxCrossDomain, true, 'mockjax call for script was mocked');
|
|
},
|
|
complete: done
|
|
});
|
|
});
|
|
|
|
t('Bug #136: cross domain script requests - POST', function(assert) {
|
|
var done = assert.async();
|
|
|
|
$.mockjax({
|
|
type: 'POST',
|
|
url: 'http://jquery-mockjax-foobar.com/somefile.js',
|
|
responseText: '(window.mockjaxCrossDomain=true)'
|
|
});
|
|
|
|
$.ajax({
|
|
type: 'POST',
|
|
dataType: 'script',
|
|
url: 'http://jquery-mockjax-foobar.com/somefile.js',
|
|
error: qunit.noErrorCallbackExpected,
|
|
success: function() {
|
|
assert.strictEqual(window.mockjaxCrossDomain, true, 'mockjax call for script was mocked');
|
|
},
|
|
complete: done
|
|
});
|
|
});
|
|
|
|
t('Bug #86: JSONP response treated as plain JSON when using jQuery-generated callback', function(assert) {
|
|
var done = assert.async();
|
|
|
|
$.mockjax({
|
|
url: 'http://foo.com/api/jsonp',
|
|
contentType: 'application/javascript',
|
|
responseText: { 'data' : 'JSONP is cool' }
|
|
});
|
|
|
|
$.ajax({
|
|
url: 'http://foo.com/api/jsonp',
|
|
dataType: 'jsonp',
|
|
jsonp: 'callback',
|
|
error: qunit.noErrorCallbackExpected,
|
|
success: function(data) {
|
|
assert.deepEqual(data, { 'data' : 'JSONP is cool' }, 'success gets correct data');
|
|
},
|
|
complete: function() {
|
|
var actualCalls = $.mockjax.mockedAjaxCalls();
|
|
assert.equal(actualCalls.length, 1, 'Mockjax call made');
|
|
assert.ok(
|
|
actualCalls[0] && actualCalls[0].url.match(/\/api\/jsonp\?callback\=jsonp[0-9]+/),
|
|
'mockjax call has expected jsonp url'
|
|
);
|
|
done();
|
|
}
|
|
});
|
|
});
|
|
|
|
t('Bug #86: JSONP response treated as plain JSON - string data', function(assert) {
|
|
var done = assert.async();
|
|
|
|
$.mockjax({
|
|
url: 'http://foo.com/api/jsonp',
|
|
contentType: 'application/javascript',
|
|
responseText: 'Testy Test'
|
|
});
|
|
|
|
$.ajax({
|
|
url: 'http://foo.com/api/jsonp',
|
|
dataType: 'jsonp',
|
|
jsonp: 'callback',
|
|
error: qunit.noErrorCallbackExpected,
|
|
success: function(data) {
|
|
assert.strictEqual(data, 'Testy Test', 'success gets correct data');
|
|
},
|
|
complete: function() {
|
|
var actualCalls = $.mockjax.mockedAjaxCalls();
|
|
assert.equal(actualCalls.length, 1, 'Mockjax call made');
|
|
assert.ok(
|
|
actualCalls[0] && actualCalls[0].url.match(/\/api\/jsonp\?callback\=jsonp[0-9]+/),
|
|
'mockjax call has expected jsonp url'
|
|
);
|
|
done();
|
|
}
|
|
});
|
|
});
|
|
|
|
t('Bug #86: JSONP response treated as plain JSON - numeric data', function(assert) {
|
|
var done = assert.async();
|
|
|
|
$.mockjax({
|
|
url: 'http://foo.com/api/jsonp',
|
|
contentType: 'application/javascript',
|
|
responseText: 42
|
|
});
|
|
|
|
$.ajax({
|
|
url: 'http://foo.com/api/jsonp',
|
|
dataType: 'jsonp',
|
|
jsonp: 'callback',
|
|
error: qunit.noErrorCallbackExpected,
|
|
success: function(data) {
|
|
assert.strictEqual(data, 42, 'success gets correct data');
|
|
},
|
|
complete: function() {
|
|
var actualCalls = $.mockjax.mockedAjaxCalls();
|
|
assert.equal(actualCalls.length, 1, 'Mockjax call made');
|
|
assert.ok(
|
|
actualCalls[0] && actualCalls[0].url.match(/\/api\/jsonp\?callback\=jsonp[0-9]+/),
|
|
'mockjax call has expected jsonp url'
|
|
);
|
|
done();
|
|
}
|
|
});
|
|
});
|
|
|
|
t('Bug #267: handle undefined url in first arg', function(assert) {
|
|
var done = assert.async();
|
|
|
|
$.mockjax({
|
|
url: '/api/foo',
|
|
contentType: 'application/json',
|
|
responseText: { foo: 'bar' }
|
|
});
|
|
|
|
$.ajax(undefined, {
|
|
url: '/api/foo',
|
|
dataType: 'json',
|
|
error: qunit.noErrorCallbackExpected,
|
|
success: function(data) {
|
|
assert.deepEqual(data, { foo: 'bar' }, 'success gets correct data');
|
|
},
|
|
complete: done
|
|
});
|
|
});
|
|
|
|
})(window.QUnit, window.jQuery); |