我正在阅读《测试Angular应用程序》一书,该书建议在afterEach
调用中将变量重置为null
。随附的文字说:
您可以使用测试的teardown部分来确保变量的实例被销毁,这有助于您避免内存泄漏。在本例中,您将使用
afterEach
函数将contact
变量设置为null
。
当下一个beforeEach
设置一个新值时,或者当describe
调用完成时,在整个套件结束时,使用的内存不是释放的吗?这种明确的拆解有什么好处?
import ContactClass from './contact';
describe('Contact class tests', () => {
let contact: ContactClass = null;
beforeEach(() => {
contact = new ContactClass();
});
it('should have a valid constructor', () => {
expect(contact).not.toBeNull();
});
afterEach(() => {
contact = null;
});
});
我也没有在Angular的测试指南中这样做:https://angular.io/guide/testing-services
这是一个茉莉花问题。它保存了一个内部引用,指向it()
块之外指定的所有内容。在您的情况下,这是contact
。这个引用不能被你的浏览器清理,因此不会被垃圾收集。
这是一篇处理这个问题的博文。
离题:前同事的问候;)
在这种情况下没有任何优势,因为JavaScript使用垃圾收集。
- 对于每个测试用例,您分配一个新值给
contact
。旧值不再被引用,可以被垃圾收集。 - 在测试套件的最后,
contact
变量超出了作用域,它的值可以被垃圾收集。