我有以下规格。
describe("SN.ExitHistory", function() {
var exitHistory;
beforeEach(function() {
SN.Utils = jasmine.createSpy("utils").andCallFake(function() {
function readSNCookie(cookieName, key) {
return "google.com";
}
function isUndefinedOrNull(param) {
return (param == null) || (param === "null");
}
function createSNCookie(snCookieName, key, value, lifeTime) {
}
var me = {
readSNCookie : readSNCookie,
isUndefinedOrNull : isUndefinedOrNull,
createSNCookie : createSNCookie
};
return me;
})();
exitHistory = SN.ExitHistory();
});
it("return last exit link", function() {
expect(exitHistory.getLastExitLink()).toEqual("google.com");
});
});
exitHistory.getLastExitLink
内部使用SN.Utils
。
测试完成后,Jasmine不会删除间谍对象utils。在下一个测试套件中,我也可以看到相同的工具。有没有办法在每次测试完成后重置间谍对象?
如果我为utils创建一个新对象,而不是创建间谍,行为是相同的。那么在这个场景中间谍和实际对象之间有什么区别。
如果我错了,请纠正我。
答案 0 :(得分:5)
前段时间我遇到了同样的问题,经过几天的努力,我找到了解决方案。如果您使用另一种方式重置间谍,请尝试使用
spyOn(SN, 'Utils');
答案 1 :(得分:0)
使用spyOn
并在before
spec块内的describe
块中声明您的间谍,然后在拆除每个spec时将清理这些间谍。
aSpec.js
describe('something', () => {
beforeAll(() => spyOn(someObject, 'someMethod').and.returnValue('foo'));
it('is spied on', () => {
expect(someObject.someMethod()).toEqual('foo');
});
});
anotherSpec.js
describe('something else', () => {
beforeAll(() => spyOn(someObject, 'someMethod').and.returnValue('bar'));
it('is spied on', () => {
expect(someObject.someMethod()).toEqual('bar');
});
});