[Framework] Spec for ApplicationBootstrapper

Add spec for the application bootstrapper; verify
its interactions with Angular. WTD-518.
This commit is contained in:
Victor Woeltjen 2014-11-06 08:23:33 -08:00
parent e2f8b1eef9
commit dac05d7841

View File

@ -4,11 +4,84 @@
* ApplicationBootstrapperSpec. Created by vwoeltje on 11/6/14.
*/
define(
[],
function () {
["../../src/bootstrap/ApplicationBootstrapper"],
function (ApplicationBootstrapper) {
"use strict";
describe("", function () {
describe("The application bootstrapper", function () {
// Test support variables
var bootstrapper,
captured,
mockAngular,
mockDocument,
mockLog,
mockApp;
// Used to capture arguments to mocks
function capture() {
var names = Array.prototype.slice.apply(arguments, []);
return function () {
var values = arguments;
names.forEach(function (name, index) {
captured[name] = values[index];
});
};
}
// Set up the mocks before each run
beforeEach(function () {
captured = {};
mockAngular = {
element: function (selector) {
captured.selector = selector;
return { ready: capture("callback") };
},
bootstrap: capture("element", "appNames")
};
mockDocument = "I am just a value.";
mockLog = { info: capture("info") };
mockApp = { name: "MockApp" };
bootstrapper = new ApplicationBootstrapper(
mockAngular,
mockDocument,
mockLog
);
bootstrapper.bootstrap(mockApp);
});
// The tests.
it("waits for the provided document element to be ready", function () {
// Should have provided Angular a selector...
expect(captured.selector).toBe(mockDocument);
// ...and called ready on the response.
expect(captured.callback).toBeDefined();
});
it("issues a bootstrap call once ready", function () {
// Verify precondition; bootstrap not called
expect(captured.element).toBeUndefined();
expect(captured.appNames).toBeUndefined();
// Call the "ready" function
captured.callback();
// Verify that bootstrap was called
expect(captured.element).toBe(mockDocument);
expect(captured.appNames).toEqual([mockApp.name]);
});
it("logs that the bootstrap phase has been reached", function () {
expect(captured.info).toBeDefined();
expect(typeof captured.info).toEqual('string');
});
});
}