簡體   English   中英

如何在每個業力/茉莉花測試文件的開頭引導角度?

[英]How to bootstrap angular at the start of each karma/jasmine test file?

是否可以在每個測試文件的開頭使用角度引導應用程序? 而不是當前行為,在一系列測試開始時有app bootstrap,然后在所有測試文件中使用相同的實例(我們現在大約有600個測試~60個文件)?

我們之前有一些聲明來處理清理工作並沒有幫助。 實際上,有時看起來有些beforeEach語句完全沒有明顯的原因(測試運行器可能存在內存泄漏)。

因此,我想采取的路線是讓每個測試文件引導角度應用程序,以便狀態完全重置,而不是重用具有由不同測試設置的狀態的依賴注入(即服務)。

您無需為測試引導應用程序。 這就是為什么我們有angular-mock 使用angular.module('app.module')我們加載了測試所需的模塊,該模塊包含我們要測試的組件。 由於angular-mock不是內存泄漏的原因,因此可能有幾個原因。 內存泄漏的最常見原因之一是茉莉本身以及我們通常編寫測試的方式。 我們在測試中注入的依賴項使用的變量是在describe范圍內定義的,並且在測試完成時不能由GC收集。 這是因為在對這些變量的引用it不能被垃圾收集,因為變量仍住在測試樹的一些其他范圍塊。 另一個問題可能是在每次測試后也應該清理的編譯元素。 所以你可能需要清理以下內容:

  • 使用$ compile進行測試指令時編譯的元素
  • describe函數范圍內的所有變量

你可以這樣做:

 describe('testSuite', function () { var suite = {}; beforeEach(module('app')); beforeEach(inject(function ($rootScope, $compile, heavyLoad) { suite.$rootScope = $rootScope; suite.$compile = $compile; suite.heavyLoad = heavyLoad; suite.$scope = $rootScope.$new(); spyOn(suite.heavyLoad, 'getHeavyString').and.callThrough(); spyOn(suite.heavyLoad, 'getHeavyObject').and.callThrough(); spyOn(suite.heavyLoad, 'getHeavyList').and.callThrough(); })); // NOTE: cleanup afterEach(function () { // NOTE: prevents DOM elements leak suite.element.remove(); }); afterAll(function () { // NOTE: prevents memory leaks because of JavaScript closures created for // jasmine syntax (beforeEach, afterEach, beforeAll, afterAll, it..). suite = null; }); suite.compileDirective = function (template) { suite.element = suite.$compile(template)(suite.$scope); suite.directiveScope = suite.element.isolateScope(); suite.directiveController = suite.element.controller('heavyLoad'); }; it('should compile correctly', function () { // given var givenTemplate = '<div heavy-load></div>'; // when suite.compileDirective(givenTemplate); // then expect(suite.directiveScope.title).toBeDefined(); expect(suite.directiveScope.items).toBeDefined(); expect(suite.heavyLoad.getHeavyString).toHaveBeenCalled(); expect(suite.heavyLoad.getHeavyList).toHaveBeenCalled(); }); }); 

取自這里

這應該可以顯着減少內存泄漏。 您還應該查看模塊結構和模塊所具有的依賴關系圖,因為您可能擁有某些測試不需要的模塊,但無論如何都會加載它們。 它們可能會占用大量內存或包含內存泄漏,並可能使您遇到其他問題。 你也可以看看這個github項目

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM