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

View File

@@ -127,6 +127,29 @@ describe("SpyRegistry", function() {
expect(subject.hasOwnProperty('spiedFunc')).toBe(false);
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);
});
});
});

View File

@@ -53,7 +53,9 @@ getJasmineRequireObj().SpyRegistry = function(j$) {
};
} else {
restoreStrategy = function() {
delete obj[methodName];
if (!delete obj[methodName]) {
obj[methodName] = originalMethod;
}
};
}