From 7a8d83a17fc9d934b95ccc4bcd2a2ecdf342cc85 Mon Sep 17 00:00:00 2001 From: valera-rozuvan Date: Wed, 5 Dec 2012 11:21:18 +0200 Subject: [PATCH] Work on RequireJS Jasmine test. --- lms/static/coffee/spec/requirejs_spec.coffee | 42 +++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/lms/static/coffee/spec/requirejs_spec.coffee b/lms/static/coffee/spec/requirejs_spec.coffee index 1636dd9d21..3e54560d2b 100644 --- a/lms/static/coffee/spec/requirejs_spec.coffee +++ b/lms/static/coffee/spec/requirejs_spec.coffee @@ -1,5 +1,10 @@ describe "RequireJS namespacing", -> beforeEach -> + + # + # * Jasmine does not provide a way to use the typeof operator. We need + # * to create our own custom matchers so that a TypeError is not thrown. + # @addMatchers requirejsTobeUndefined: -> typeof requirejs is "undefined" @@ -16,6 +21,10 @@ describe "RequireJS namespacing", -> expect(window.RequireJS).toEqual jasmine.any(Object) it "check that requirejs(), require(), and define() are not in the global namespace", -> + + # The custom matchers that we defined in the beforeEach() function do + # not operate on an object. We pass a dummy empty object {} not to + # confuse Jasmine. expect({}).requirejsTobeUndefined() expect({}).requireTobeUndefined() expect({}).defineTobeUndefined() @@ -27,23 +36,54 @@ describe "RequireJS namespacing", -> describe "RequireJS module creation", -> inDefineCallback = undefined inRequireCallback = undefined - it "check that we can use RequireJS define() and require() a module", -> + it "check that we can use RequireJS to define() and require() a module", -> + + # Because Require JS works asynchronously when defining and requiring + # modules, we need to use the special Jasmine functions runs(), and + # waitsFor() to set up this test. runs -> + + # Initialize the variable that we will test for. They will be set + # to true in the appropriate callback functions called by Require + # JS. If their values do not change, this will mean that something + # is not working as is intended. inDefineCallback = false inRequireCallback = false + + # Define our test module. RequireJS.define "test_module", [], -> inDefineCallback = true + + # This module returns an object. It can be accessed via the + # Require JS require() function. module_status: "OK" + + # Require our defined test module. RequireJS.require ["test_module"], (test_module) -> inRequireCallback = true + + # If our test module was defined properly, then we should + # be able to get the object it returned, and query some + # property. expect(test_module.module_status).toBe "OK" + + # We will wait for a specified amount of time (1 second), before + # checking if our module was defined and that we were able to + # require() the module. waitsFor (-> + + # If at least one of the callback functions was not reached, we + # fail this test. return false if (inDefineCallback isnt true) or (inRequireCallback isnt true) + + # Both of the callbacks were reached. true ), "We should eventually end up in the defined callback", 1000 + + # The final test behavior, after waitsFor() finishes waiting. runs -> expect(inDefineCallback).toBeTruthy() expect(inRequireCallback).toBeTruthy()