是否在afterEach中设置变量为空以防止内存泄漏?



我正在阅读《测试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变量超出了作用域,它的值可以被垃圾收集。

最新更新