fix(PrettyPrint): jasmine.createSpyObj('obj', ['toString']);
The PrettyPrint handler for scalars uses toString() but if that method has been spyed on, then the stringify fails with TypeError: Cannot read property 'length' of undefined. By hanlding this case earlier in format() we avoid the error. Add unit test covering this case.
This commit is contained in:
@@ -285,6 +285,25 @@ describe("jasmineUnderTest.pp", function () {
|
|||||||
expect(jasmineUnderTest.pp(env.createSpy("something"))).toEqual("spy on something");
|
expect(jasmineUnderTest.pp(env.createSpy("something"))).toEqual("spy on something");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should stringify spyOn toString properly", function() {
|
||||||
|
var TestObject = {
|
||||||
|
someFunction: function() {}
|
||||||
|
},
|
||||||
|
env = new jasmineUnderTest.Env();
|
||||||
|
|
||||||
|
var spyRegistry = new jasmineUnderTest.SpyRegistry({
|
||||||
|
currentSpies: function() {return [];},
|
||||||
|
createSpy: function(name, originalFn) {
|
||||||
|
return jasmineUnderTest.Spy(name, originalFn);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
spyRegistry.spyOn(TestObject, 'toString');
|
||||||
|
const testSpyObj = env.createSpyObj('TheClassName', ['toString']);
|
||||||
|
|
||||||
|
expect(jasmineUnderTest.pp(testSpyObj)).toEqual("spy on TheClassName.toString");
|
||||||
|
});
|
||||||
|
|
||||||
it("should stringify objects that implement jasmineToString", function () {
|
it("should stringify objects that implement jasmineToString", function () {
|
||||||
var obj = {
|
var obj = {
|
||||||
jasmineToString: function () { return "strung"; }
|
jasmineToString: function () { return "strung"; }
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ getJasmineRequireObj().pp = function(j$) {
|
|||||||
this.emitString(value);
|
this.emitString(value);
|
||||||
} else if (j$.isSpy(value)) {
|
} else if (j$.isSpy(value)) {
|
||||||
this.emitScalar('spy on ' + value.and.identity);
|
this.emitScalar('spy on ' + value.and.identity);
|
||||||
|
} else if (j$.isSpy(value.toString)) {
|
||||||
|
this.emitScalar('spy on ' + value.toString.and.identity);
|
||||||
} else if (value instanceof RegExp) {
|
} else if (value instanceof RegExp) {
|
||||||
this.emitScalar(value.toString());
|
this.emitScalar(value.toString());
|
||||||
} else if (typeof value === 'function') {
|
} else if (typeof value === 'function') {
|
||||||
|
|||||||
Reference in New Issue
Block a user