diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index fbd9dd17..6aca62cf 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -324,47 +324,6 @@ getJasmineRequireObj().base = function(j$, jasmineGlobal) { return putativeSpy.and instanceof j$.SpyStrategy && putativeSpy.calls instanceof j$.CallTracker; }; - - /** - * Create an object with multiple {@link Spy}s as its members. - * @name jasmine.createSpyObj - * @function - * @param {String} [baseName] - Base name for the spies in the object. - * @param {String[]|Object} methodNames - Array of method names to create spies for, or Object whose keys will be method names and values the {@link Spy#and#returnValue|returnValue}. - * @return {Object} - */ - j$.createSpyObj = function(baseName, methodNames) { - var baseNameIsCollection = j$.isObject_(baseName) || j$.isArray_(baseName); - - if (baseNameIsCollection && j$.util.isUndefined(methodNames)) { - methodNames = baseName; - baseName = 'unknown'; - } - - var obj = {}; - var spiesWereSet = false; - - if (j$.isArray_(methodNames)) { - for (var i = 0; i < methodNames.length; i++) { - obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); - spiesWereSet = true; - } - } else if (j$.isObject_(methodNames)) { - for (var key in methodNames) { - if (methodNames.hasOwnProperty(key)) { - obj[key] = j$.createSpy(baseName + '.' + key); - obj[key].and.returnValue(methodNames[key]); - spiesWereSet = true; - } - } - } - - if (!spiesWereSet) { - throw 'createSpyObj requires a non-empty array or object of method names to create spies for'; - } - - return obj; - }; }; getJasmineRequireObj().util = function(j$) { @@ -1153,6 +1112,39 @@ getJasmineRequireObj().Env = function(j$) { return spyRegistry.spyOnProperty.apply(spyRegistry, arguments); }; + this.createSpyObj = function(baseName, methodNames) { + var baseNameIsCollection = j$.isObject_(baseName) || j$.isArray_(baseName); + + if (baseNameIsCollection && j$.util.isUndefined(methodNames)) { + methodNames = baseName; + baseName = 'unknown'; + } + + var obj = {}; + var spiesWereSet = false; + + if (j$.isArray_(methodNames)) { + for (var i = 0; i < methodNames.length; i++) { + obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); + spiesWereSet = true; + } + } else if (j$.isObject_(methodNames)) { + for (var key in methodNames) { + if (methodNames.hasOwnProperty(key)) { + obj[key] = j$.createSpy(baseName + '.' + key); + obj[key].and.returnValue(methodNames[key]); + spiesWereSet = true; + } + } + } + + if (!spiesWereSet) { + throw 'createSpyObj requires a non-empty array or object of method names to create spies for'; + } + + return obj; + }; + var ensureIsFunction = function(fn, caller) { if (!j$.isFunction_(fn)) { throw new Error(caller + ' expects a function argument; received ' + j$.getType_(fn)); @@ -4914,6 +4906,18 @@ getJasmineRequireObj().interface = function(jasmine, env) { return env.clock; }; + /** + * Create an object with multiple {@link Spy}s as its members. + * @name jasmine.createSpyObj + * @function + * @param {String} [baseName] - Base name for the spies in the object. + * @param {String[]|Object} methodNames - Array of method names to create spies for, or Object whose keys will be method names and values the {@link Spy#and#returnValue|returnValue}. + * @return {Object} + */ + jasmine.createSpyObj = function(baseName, methodNames) { + return env.createSpyObj(baseName, methodNames); + }; + return jasmineInterface; }; diff --git a/spec/core/SpySpec.js b/spec/core/SpySpec.js index 562f684b..ac75ea47 100644 --- a/spec/core/SpySpec.js +++ b/spec/core/SpySpec.js @@ -1,4 +1,10 @@ describe('Spies', function () { + var env; + + beforeEach(function() { + env = new jasmineUnderTest.Env(); + }); + describe("createSpy", function() { var TestClass; @@ -80,7 +86,7 @@ describe('Spies', function () { describe("createSpyObj", function() { it("should create an object with spy methods and corresponding return values when you call jasmine.createSpyObj() with an object", function () { - var spyObj = jasmineUnderTest.createSpyObj('BaseName', {'method1': 42, 'method2': 'special sauce' }); + var spyObj = env.createSpyObj('BaseName', {'method1': 42, 'method2': 'special sauce' }); expect(spyObj.method1()).toEqual(42); expect(spyObj.method1.and.identity).toEqual('BaseName.method1'); @@ -91,7 +97,7 @@ describe('Spies', function () { it("should create an object with a bunch of spy methods when you call jasmine.createSpyObj()", function() { - var spyObj = jasmineUnderTest.createSpyObj('BaseName', ['method1', 'method2']); + var spyObj = env.createSpyObj('BaseName', ['method1', 'method2']); expect(spyObj).toEqual({ method1: jasmine.any(Function), method2: jasmine.any(Function)}); expect(spyObj.method1.and.identity).toEqual('BaseName.method1'); @@ -99,7 +105,7 @@ describe('Spies', function () { }); it("should allow you to omit the baseName", function() { - var spyObj = jasmineUnderTest.createSpyObj(['method1', 'method2']); + var spyObj = env.createSpyObj(['method1', 'method2']); expect(spyObj).toEqual({ method1: jasmine.any(Function), method2: jasmine.any(Function)}); expect(spyObj.method1.and.identity).toEqual('unknown.method1'); @@ -108,19 +114,19 @@ describe('Spies', function () { it("should throw if you do not pass an array or object argument", function() { expect(function() { - jasmineUnderTest.createSpyObj('BaseName'); + env.createSpyObj('BaseName'); }).toThrow("createSpyObj requires a non-empty array or object of method names to create spies for"); }); it("should throw if you pass an empty array argument", function() { expect(function() { - jasmineUnderTest.createSpyObj('BaseName', []); + env.createSpyObj('BaseName', []); }).toThrow("createSpyObj requires a non-empty array or object of method names to create spies for"); }); it("should throw if you pass an empty object argument", function() { expect(function() { - jasmineUnderTest.createSpyObj('BaseName', {}); + env.createSpyObj('BaseName', {}); }).toThrow("createSpyObj requires a non-empty array or object of method names to create spies for"); }); }); diff --git a/src/core/Env.js b/src/core/Env.js index 003fd8fc..3820d698 100644 --- a/src/core/Env.js +++ b/src/core/Env.js @@ -412,6 +412,39 @@ getJasmineRequireObj().Env = function(j$) { return spyRegistry.spyOnProperty.apply(spyRegistry, arguments); }; + this.createSpyObj = function(baseName, methodNames) { + var baseNameIsCollection = j$.isObject_(baseName) || j$.isArray_(baseName); + + if (baseNameIsCollection && j$.util.isUndefined(methodNames)) { + methodNames = baseName; + baseName = 'unknown'; + } + + var obj = {}; + var spiesWereSet = false; + + if (j$.isArray_(methodNames)) { + for (var i = 0; i < methodNames.length; i++) { + obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); + spiesWereSet = true; + } + } else if (j$.isObject_(methodNames)) { + for (var key in methodNames) { + if (methodNames.hasOwnProperty(key)) { + obj[key] = j$.createSpy(baseName + '.' + key); + obj[key].and.returnValue(methodNames[key]); + spiesWereSet = true; + } + } + } + + if (!spiesWereSet) { + throw 'createSpyObj requires a non-empty array or object of method names to create spies for'; + } + + return obj; + }; + var ensureIsFunction = function(fn, caller) { if (!j$.isFunction_(fn)) { throw new Error(caller + ' expects a function argument; received ' + j$.getType_(fn)); diff --git a/src/core/base.js b/src/core/base.js index da39f762..68817d95 100644 --- a/src/core/base.js +++ b/src/core/base.js @@ -192,45 +192,4 @@ getJasmineRequireObj().base = function(j$, jasmineGlobal) { return putativeSpy.and instanceof j$.SpyStrategy && putativeSpy.calls instanceof j$.CallTracker; }; - - /** - * Create an object with multiple {@link Spy}s as its members. - * @name jasmine.createSpyObj - * @function - * @param {String} [baseName] - Base name for the spies in the object. - * @param {String[]|Object} methodNames - Array of method names to create spies for, or Object whose keys will be method names and values the {@link Spy#and#returnValue|returnValue}. - * @return {Object} - */ - j$.createSpyObj = function(baseName, methodNames) { - var baseNameIsCollection = j$.isObject_(baseName) || j$.isArray_(baseName); - - if (baseNameIsCollection && j$.util.isUndefined(methodNames)) { - methodNames = baseName; - baseName = 'unknown'; - } - - var obj = {}; - var spiesWereSet = false; - - if (j$.isArray_(methodNames)) { - for (var i = 0; i < methodNames.length; i++) { - obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); - spiesWereSet = true; - } - } else if (j$.isObject_(methodNames)) { - for (var key in methodNames) { - if (methodNames.hasOwnProperty(key)) { - obj[key] = j$.createSpy(baseName + '.' + key); - obj[key].and.returnValue(methodNames[key]); - spiesWereSet = true; - } - } - } - - if (!spiesWereSet) { - throw 'createSpyObj requires a non-empty array or object of method names to create spies for'; - } - - return obj; - }; }; diff --git a/src/core/requireInterface.js b/src/core/requireInterface.js index aa79d206..4e182648 100644 --- a/src/core/requireInterface.js +++ b/src/core/requireInterface.js @@ -256,5 +256,17 @@ getJasmineRequireObj().interface = function(jasmine, env) { return env.clock; }; + /** + * Create an object with multiple {@link Spy}s as its members. + * @name jasmine.createSpyObj + * @function + * @param {String} [baseName] - Base name for the spies in the object. + * @param {String[]|Object} methodNames - Array of method names to create spies for, or Object whose keys will be method names and values the {@link Spy#and#returnValue|returnValue}. + * @return {Object} + */ + jasmine.createSpyObj = function(baseName, methodNames) { + return env.createSpyObj(baseName, methodNames); + }; + return jasmineInterface; };