90 lines
3.3 KiB
CoffeeScript
90 lines
3.3 KiB
CoffeeScript
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"
|
|
|
|
requireTobeUndefined: ->
|
|
typeof require is "undefined"
|
|
|
|
defineTobeUndefined: ->
|
|
typeof define is "undefined"
|
|
|
|
|
|
it "check that the RequireJS object is present in the global namespace", ->
|
|
expect(RequireJS).toEqual jasmine.any(Object)
|
|
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()
|
|
expect(window.requirejs).not.toBeDefined()
|
|
expect(window.require).not.toBeDefined()
|
|
expect(window.define).not.toBeDefined()
|
|
|
|
|
|
describe "RequireJS module creation", ->
|
|
inDefineCallback = undefined
|
|
inRequireCallback = undefined
|
|
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()
|
|
|
|
|