Update test specs to use Jasmine 3 (#2089)
* Updated Karma and Jasmine versions * Added DOMObserver class. Supports promise-based testing of DOM changes Update asynchronous test specs to use promises or done() instead of waitsFor/runs * Modified ActionCapability to duplicate context object properties as own properties for better object equality comparisons * Global find + replace to fix syntax issues * Fixed various issues caused by non-deterministic runtime order of tests in Jasmine 3. Fixed issues caused by changes to determination of object equality * Addressed review comments * Resolved merge conflicts with master * Fixed style errors * Use spy.calls.count() instead of manually tracking
This commit is contained in:
committed by
Pete Richards
parent
013eba744d
commit
433dee0314
@@ -28,14 +28,9 @@ define(
|
||||
var mockProviders,
|
||||
mockQ,
|
||||
resolves,
|
||||
mockCallback,
|
||||
testUsers,
|
||||
aggregator;
|
||||
|
||||
function callbackCalled() {
|
||||
return mockCallback.calls.length > 0;
|
||||
}
|
||||
|
||||
function resolveProviderPromises() {
|
||||
['a', 'b', 'c'].forEach(function (id, i) {
|
||||
resolves[id](testUsers[i]);
|
||||
@@ -57,7 +52,7 @@ define(
|
||||
['getUser']
|
||||
);
|
||||
|
||||
mockProvider.getUser.andReturn(new Promise(function (r) {
|
||||
mockProvider.getUser.and.returnValue(new Promise(function (r) {
|
||||
resolves[id] = r;
|
||||
}));
|
||||
|
||||
@@ -65,12 +60,10 @@ define(
|
||||
});
|
||||
|
||||
mockQ = jasmine.createSpyObj('$q', ['all']);
|
||||
mockQ.all.andCallFake(function (promises) {
|
||||
mockQ.all.and.callFake(function (promises) {
|
||||
return Promise.all(promises);
|
||||
});
|
||||
|
||||
mockCallback = jasmine.createSpy('callback');
|
||||
|
||||
aggregator = new IdentityAggregator(
|
||||
mockQ,
|
||||
mockProviders
|
||||
@@ -91,47 +84,44 @@ define(
|
||||
});
|
||||
|
||||
it("returns the first result when it is defined", function () {
|
||||
aggregator.getUser().then(mockCallback);
|
||||
var promise = aggregator.getUser();
|
||||
|
||||
resolveProviderPromises();
|
||||
|
||||
waitsFor(callbackCalled);
|
||||
runs(function () {
|
||||
expect(mockCallback).toHaveBeenCalledWith(testUsers[0]);
|
||||
return promise.then(function (user) {
|
||||
expect(user).toEqual(testUsers[0]);
|
||||
});
|
||||
});
|
||||
|
||||
it("returns a later result when earlier results are undefined", function () {
|
||||
testUsers[0] = undefined;
|
||||
|
||||
aggregator.getUser().then(mockCallback);
|
||||
var promise = aggregator.getUser();
|
||||
|
||||
resolveProviderPromises();
|
||||
|
||||
waitsFor(callbackCalled);
|
||||
runs(function () {
|
||||
expect(mockCallback).toHaveBeenCalledWith(testUsers[1]);
|
||||
return promise.then(function (user) {
|
||||
expect(user).toEqual(testUsers[1]);
|
||||
});
|
||||
});
|
||||
|
||||
it("returns undefined when no providers expose users", function () {
|
||||
testUsers = [undefined, undefined, undefined];
|
||||
|
||||
aggregator.getUser().then(mockCallback);
|
||||
var promise = aggregator.getUser();
|
||||
|
||||
resolveProviderPromises();
|
||||
|
||||
waitsFor(callbackCalled);
|
||||
runs(function () {
|
||||
expect(mockCallback).toHaveBeenCalledWith(undefined);
|
||||
return promise.then(function (user) {
|
||||
expect(user).toBe(undefined);
|
||||
});
|
||||
});
|
||||
|
||||
it("returns undefined when there are no providers", function () {
|
||||
new IdentityAggregator(mockQ, []).getUser().then(mockCallback);
|
||||
waitsFor(callbackCalled);
|
||||
runs(function () {
|
||||
expect(mockCallback).toHaveBeenCalledWith(undefined);
|
||||
var promise = new IdentityAggregator(mockQ, []).getUser();
|
||||
|
||||
return promise.then(function (user) {
|
||||
expect(user).toBe(undefined);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -32,15 +32,9 @@ define(
|
||||
mockCreationService,
|
||||
mockParent,
|
||||
mockCreatedObject,
|
||||
mockCallback,
|
||||
decorator;
|
||||
|
||||
function calledBack() {
|
||||
return mockCallback.calls.length > 0;
|
||||
}
|
||||
|
||||
beforeEach(function () {
|
||||
mockCallback = jasmine.createSpy('callback');
|
||||
mockIdentityService = jasmine.createSpyObj(
|
||||
'identityService',
|
||||
['getUser']
|
||||
@@ -58,10 +52,10 @@ define(
|
||||
['getCapability', 'getId', 'getModel', 'hasCapability', 'useCapability']
|
||||
);
|
||||
mockCreationService.createObject
|
||||
.andReturn(Promise.resolve(mockCreatedObject));
|
||||
.and.returnValue(Promise.resolve(mockCreatedObject));
|
||||
mockIdentityService.getUser
|
||||
.andReturn(Promise.resolve({ key: "test-user-id" }));
|
||||
mockParent.getId.andReturn('test-id');
|
||||
.and.returnValue(Promise.resolve({ key: "test-user-id" }));
|
||||
mockParent.getId.and.returnValue('test-id');
|
||||
decorator = new IdentityCreationDecorator(
|
||||
mockIdentityService,
|
||||
mockCreationService
|
||||
@@ -71,33 +65,27 @@ define(
|
||||
it("delegates to its decorated service when identity is available", function () {
|
||||
var testModel = { someKey: "some value" };
|
||||
|
||||
decorator.createObject(testModel, mockParent)
|
||||
.then(mockCallback);
|
||||
|
||||
waitsFor(calledBack);
|
||||
runs(function () {
|
||||
expect(mockCallback)
|
||||
.toHaveBeenCalledWith(mockCreatedObject);
|
||||
});
|
||||
return decorator.createObject(testModel, mockParent)
|
||||
.then(function (object) {
|
||||
expect(object).toEqual(mockCreatedObject);
|
||||
});
|
||||
});
|
||||
|
||||
it("adds a creator property", function () {
|
||||
var testModel = { someKey: "some value" };
|
||||
|
||||
decorator.createObject(testModel, mockParent)
|
||||
.then(mockCallback);
|
||||
return decorator.createObject(testModel, mockParent)
|
||||
.then(function (object) {
|
||||
expect(object)
|
||||
.toEqual(mockCreatedObject);
|
||||
|
||||
waitsFor(calledBack);
|
||||
runs(function () {
|
||||
expect(mockCallback)
|
||||
.toHaveBeenCalledWith(mockCreatedObject);
|
||||
// Make sure arguments were delegated appropriately
|
||||
expect(mockCreationService.createObject)
|
||||
// Make sure arguments were delegated appropriately
|
||||
expect(mockCreationService.createObject)
|
||||
.toHaveBeenCalledWith(
|
||||
{ someKey: "some value", creator: "test-user-id" },
|
||||
mockParent
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -36,13 +36,13 @@ define(
|
||||
['getUser']
|
||||
);
|
||||
|
||||
mockIdentityService.getUser.andReturn(mockPromise);
|
||||
mockIdentityService.getUser.and.returnValue(mockPromise);
|
||||
|
||||
indicator = new IdentityIndicator(mockIdentityService);
|
||||
});
|
||||
|
||||
it("shows information about the current user", function () {
|
||||
mockPromise.then.mostRecentCall.args[0]({
|
||||
mockPromise.then.calls.mostRecent().args[0]({
|
||||
key: "testuserid",
|
||||
name: "A User"
|
||||
});
|
||||
@@ -59,7 +59,7 @@ define(
|
||||
});
|
||||
|
||||
it("shows nothing when there is no identity information", function () {
|
||||
mockPromise.then.mostRecentCall.args[0](undefined);
|
||||
mockPromise.then.calls.mostRecent().args[0](undefined);
|
||||
expect(indicator.getCssClass()).toBeUndefined();
|
||||
expect(indicator.getText()).toBeUndefined();
|
||||
expect(indicator.getDescription()).toBeUndefined();
|
||||
|
||||
@@ -28,16 +28,11 @@ define(
|
||||
function (IdentityProvider) {
|
||||
|
||||
describe("IdentityProvider", function () {
|
||||
var mockQ, mockCallback, provider;
|
||||
|
||||
function calledBack() {
|
||||
return mockCallback.calls.length > 0;
|
||||
}
|
||||
var mockQ, provider;
|
||||
|
||||
beforeEach(function () {
|
||||
mockCallback = jasmine.createSpy('callback');
|
||||
mockQ = jasmine.createSpyObj('$q', ['when']);
|
||||
mockQ.when.andCallFake(function (v) {
|
||||
mockQ.when.and.callFake(function (v) {
|
||||
return Promise.resolve(v);
|
||||
});
|
||||
|
||||
@@ -45,11 +40,8 @@ define(
|
||||
});
|
||||
|
||||
it("provides an undefined user", function () {
|
||||
provider.getUser().then(mockCallback);
|
||||
|
||||
waitsFor(calledBack);
|
||||
runs(function () {
|
||||
expect(mockCallback).toHaveBeenCalledWith(undefined);
|
||||
return provider.getUser().then(function (user) {
|
||||
expect(user).toBe(undefined);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user