fallback on assignment when a spy cannot be deleted

This commit is contained in:
Sean Parmelee
2016-09-01 13:39:25 -05:00
parent c7cc3b4a29
commit 8676bbf11a
2 changed files with 27 additions and 2 deletions
+24 -1
View File
@@ -127,6 +127,29 @@ describe("SpyRegistry", function() {
expect(subject.hasOwnProperty('spiedFunc')).toBe(false); expect(subject.hasOwnProperty('spiedFunc')).toBe(false);
expect(subject.spiedFunc).toBe(originalFunction); expect(subject.spiedFunc).toBe(originalFunction);
}) });
it("restores the original function when it\'s inherited and cannot be deleted", function() {
// IE 8 doesn't support `Object.create` or `Object.defineProperty`
if (jasmine.getEnv().ieVersion < 9) { return; }
var spies = [],
spyRegistry = new jasmineUnderTest.SpyRegistry({currentSpies: function() { return spies; }}),
originalFunction = function() {},
subjectParent = {spiedFunc: originalFunction};
var subject = Object.create(subjectParent);
spyRegistry.spyOn(subject, 'spiedFunc');
// simulate a spy that cannot be deleted
Object.defineProperty(subject, 'spiedFunc', {
configurable: false
});
spyRegistry.clearSpies();
expect(jasmineUnderTest.isSpy(subject.spiedFunc)).toBe(false);
});
}); });
}); });
+3 -1
View File
@@ -53,7 +53,9 @@ getJasmineRequireObj().SpyRegistry = function(j$) {
}; };
} else { } else {
restoreStrategy = function() { restoreStrategy = function() {
delete obj[methodName]; if (!delete obj[methodName]) {
obj[methodName] = originalMethod;
}
}; };
} }