0

我有一個問題運行我的中途測試(即集成測試,這意味着它們是單元測試和E2E測試之間的一半)。AngularJS karma /茉莉花測試會導致測試文件之間的衝突

我的版本是帶有RequireJS的AngularJS(它在Karma中需要使用RequireJS插件才能使測試運行)。我實際上使用一個名爲AngularAMD的插件來使這些插件一起工作。因此,當我運行我的測試時,首先必須執行引導文件,以確保Angular應用程序已初始化,然後才能對應用程序運行測試。

由於它們是集成測試,它們正在檢查服務是否與真實的http請求連接,並且正在進行轉換(即已註銷的用戶現在已登錄)。所以,這些是異步測試,需要時間來接收響應。

我的問題 - Karma/Jasmine似乎只在開始時引導角度應用程序一次,然後每個測試似乎在運行測試時都使用此實例。因此,如果在兩個測試中使用服務,並且具有持久緩存狀態(即,用戶已登錄),則每個測試都將從相同的狀態中提取。

例如,我有一個需要用戶註銷的集成測試,另一個需要用戶登錄的集成測試,因此每個集成測試都會干擾另一個集成測試。

是否有可能以某種方式設置Karma/Jasmine,每個測試文件都將引導它自己的AngularJS實例進行測試?我試圖找出如何做到這一點,但我認爲這可能是不可能的,除非我強迫Karma/Jasmine一次運行一個測試。

想法?

回答

0

Jasmine has beforeEach/beforeAll and afterEach/afterAll methods您可以爲您的環境設置進行定義。根據測試文件之間的範圍,可能必須重新定義每個文件中的beforeX方法,但是應該在每次測試之前讓您使用乾淨的應用程序。

+0

這並不能解決使用Angular和RequireJS時的問題,因爲這些文件之間的狀態是持久的。如果一個測試文件注入「UserService」角度服務並登錄用戶,則當另一個測試文件也注入該服務時,用戶將登錄(即使此測試需要用戶註銷) 。因此,如果此測試註銷用戶,則另一個測試文件具有開始失敗的測試,因爲用戶不再處於所需的登錄狀態。 – ngDeveloper

+0

其實,我覺得我發現因爲我在做異步調用(集成測試使用等待響應的API請求),因爲我在茉莉花中使用'done()'方法來完成這些工作,結果是實際上每個集成測試都是一個接一個地進行,而不是同時進行,所以看起來問題已經解決。 – ngDeveloper