UNPKG

ionic

Version:

A tool for creating and developing Ionic Framework mobile apps.

150 lines (130 loc) 5.21 kB
/* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * */ describe("require + define", function () { it("exists off of cordova", function () { var cordova = require('cordova'); expect(cordova.require).toBeDefined(); expect(cordova.define).toBeDefined(); }); describe("when defining", function () { it("can define and remove module", function () { define("a", jasmine.createSpy()); define.remove("a"); }); it("can remove a module that doesn't exist", function () { define.remove("can't touch this"); }); it("throws an error the module already exists", function () { expect(function () { define("cordova", function () {}); }).toThrow("module cordova already defined"); }); it("doesn't call the factory method when defining", function () { var factory = jasmine.createSpy(); define("ff", factory); expect(factory).not.toHaveBeenCalled(); }); }); describe("when requiring", function () { it("throws an exception when module doesn't exist", function () { expect(function () { require("your mom"); }).toThrow("module your mom not found"); }); it("throws an exception when modules depend on each other", function () { define("ModuleA", function(require, exports, module) { require("ModuleB"); }); define("ModuleB", function(require, exports, module) { require("ModuleA"); }); expect(function () { require("ModuleA"); }).toThrow("Cycle in require graph: ModuleA->ModuleB->ModuleA"); define.remove("ModuleA"); define.remove("ModuleB"); }); it("throws an exception when a cycle of requires occurs", function () { define("ModuleA", function(require, exports, module) { require("ModuleB"); }); define("ModuleB", function(require, exports, module) { require("ModuleC"); }); define("ModuleC", function(require, exports, module) { require("ModuleA"); }); expect(function () { require("ModuleA"); }).toThrow("Cycle in require graph: ModuleA->ModuleB->ModuleC->ModuleA"); define.remove("ModuleA"); define.remove("ModuleB"); define.remove("ModuleC"); }); it("calls the factory method when requiring", function () { var factory = jasmine.createSpy(); define("dino", factory); require("dino"); expect(factory).toHaveBeenCalledWith(jasmine.any(Function), {}, { id: "dino", exports: {} }); define.remove("dino"); }); it("returns the exports object", function () { define("a", function (require, exports, module) { exports.stuff = "asdf"; }); var v = require("a"); expect(v.stuff).toBe("asdf"); define.remove("a"); }); it("can use both the exports and module.exports object", function () { define("a", function (require, exports, module) { exports.a = "a"; module.exports.b = "b"; }); var v = require("a"); expect(v.a).toBe("a"); expect(v.b).toBe("b"); define.remove("a"); }); it("returns was is assigned to module.exports", function () { var Foo = function () { }; define("a", function (require, exports, module) { module.exports = new Foo(); }); var v = require("a"); expect(v instanceof Foo).toBe(true); define.remove("a"); }); it("has the id and exports values but not the factory on the module object", function () { var factory = function (require, exports, module) { expect(module.id).toBe("a"); expect(module.exports).toBeDefined(); expect(module.factory).not.toBeDefined(); }; define("a", factory); require("a"); }); }); });