aspnetcore/client-ts/Microsoft.AspNetCore.Signal.../wwwroot/js/hubConnectionTests.js

244 lines
9.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
'use strict';
var TESTHUBENDPOINT_URL = '/testhub';
describe('hubConnection', function () {
eachTransportAndProtocol(function (transportType, protocol) {
describe(protocol.name + ' over ' + signalR.TransportType[transportType] + ' transport', function () {
it('can invoke server method and receive result', function (done) {
var message = "你好,世界!";
var options = {
transport: transportType,
protocol: protocol,
logging: signalR.LogLevel.Trace
};
var hubConnection = new signalR.HubConnection(TESTHUBENDPOINT_URL, options);
hubConnection.onclose(function (error) {
expect(error).toBe(undefined);
done();
});
hubConnection.start().then(function () {
hubConnection.invoke('Echo', message).then(function (result) {
expect(result).toBe(message);
}).catch(function (e) {
fail(e);
}).then(function () {
hubConnection.stop();
});
}).catch(function (e) {
fail(e);
done();
});
});
it('can invoke server method structural object and receive structural result', function (done) {
var options = {
transport: transportType,
protocol: protocol,
logging: signalR.LogLevel.Trace
};
var hubConnection = new signalR.HubConnection(TESTHUBENDPOINT_URL, options);
hubConnection.on('CustomObject', function (customObject) {
expect(customObject.Name).toBe('test');
expect(customObject.Value).toBe(42);
hubConnection.stop();
});
hubConnection.onclose(function (error) {
expect(error).toBe(undefined);
done();
});
hubConnection.start().then(function () {
hubConnection.send('SendCustomObject', { Name: "test", Value: 42});
}).catch(function (e) {
fail(e);
done();
});
});
it('can stream server method and receive result', function (done) {
var options = {
transport: transportType,
protocol: protocol,
logging: signalR.LogLevel.Trace
};
var hubConnection = new signalR.HubConnection(TESTHUBENDPOINT_URL, options);
hubConnection.onclose(function (error) {
expect(error).toBe(undefined);
done();
});
var received = [];
hubConnection.start().then(function () {
hubConnection.stream('Stream').subscribe({
next: function next(item) {
received.push(item);
},
error: function error(err) {
fail(err);
hubConnection.stop();
},
complete: function complete() {
expect(received).toEqual(["a", "b", "c"]);
hubConnection.stop();
}
});
}).catch(function (e) {
fail(e);
done();
});
});
it('rethrows an exception from the server when invoking', function (done) {
var errorMessage = "An error occurred.";
var options = {
transport: transportType,
protocol: protocol,
logging: signalR.LogLevel.Trace
};
var hubConnection = new signalR.HubConnection(TESTHUBENDPOINT_URL, options);
hubConnection.start().then(function () {
hubConnection.invoke('ThrowException', errorMessage).then(function () {
// exception expected but none thrown
fail();
}).catch(function (e) {
expect(e.message).toBe(errorMessage);
}).then(function () {
return hubConnection.stop();
}).then(function () {
done();
});
}).catch(function (e) {
fail(e);
done();
});
});
it('rethrows an exception from the server when streaming', function (done) {
var errorMessage = "An error occurred.";
var options = {
transport: transportType,
protocol: protocol,
logging: signalR.LogLevel.Trace
};
var hubConnection = new signalR.HubConnection(TESTHUBENDPOINT_URL, options);
hubConnection.start().then(function () {
hubConnection.stream('ThrowException', errorMessage).subscribe({
next: function next(item) {
fail();
},
error: function error(err) {
expect(err.message).toEqual("An error occurred.");
done();
},
complete: function complete() {
fail();
}
});
}).catch(function (e) {
fail(e);
done();
});
});
it('can receive server calls', function (done) {
var options = {
transport: transportType,
protocol: protocol,
logging: signalR.LogLevel.Trace
};
var hubConnection = new signalR.HubConnection(TESTHUBENDPOINT_URL, options);
var message = "你好 SignalR";
// client side method names are case insensitive
var methodName = 'message';
var idx = Math.floor(Math.random() * (methodName.length - 1));
methodName = methodName.substr(0, idx) + methodName[idx].toUpperCase() + methodName.substr(idx + 1);
hubConnection.on(methodName, function (msg) {
expect(msg).toBe(message);
done();
});
hubConnection.start().then(function () {
return hubConnection.invoke('InvokeWithString', message);
})
.then(function() {
return hubConnection.stop();
})
.catch(function (e) {
fail(e);
done();
});
});
it('closed with error if hub cannot be created', function (done) {
var errorRegex = {
WebSockets: "1011|1005", // Message is browser specific (e.g. 'Websocket closed with status code: 1011'), Edge and IE report 1005 even though the server sent 1011
LongPolling: "Internal Server Error",
ServerSentEvents: "Error occurred"
};
var options = {
transport: transportType,
protocol: protocol,
logging: signalR.LogLevel.Trace
};
var hubConnection = new signalR.HubConnection('http://' + document.location.host + '/uncreatable', options);
hubConnection.onclose(function (error) {
expect(error.message).toMatch(errorRegex[signalR.TransportType[transportType]]);
done();
});
hubConnection.start();
});
it('can handle different types', function (done) {
var options = {
transport: transportType,
protocol: protocol,
logging: signalR.LogLevel.Trace
};
var hubConnection = new signalR.HubConnection(TESTHUBENDPOINT_URL, options);
hubConnection.onclose(function (error) {
expect(error).toBe(undefined);
done();
});
var complexObject = {
String: 'Hello, World!',
IntArray: [0x01, 0x02, 0x03, 0xff]
};
hubConnection.start().then(function () {
return hubConnection.invoke('EchoComplexObject', complexObject);
})
.then(function(value) {
expect(value).toEqual(complexObject);
})
.then(function () {
hubConnection.stop();
})
.catch(function (e) {
fail(e);
done();
});
});
});
});
});