2015-06-26 56 views
1

爲什麼後續的ngmocke2e測試未能調用模擬後端?只有第一個測試會通過。第二次測試會稱爲真正的後端。爲什麼後續的ngmocke2e測試未能調用模擬後端。只有第一個測試會通過。第二個測試會調用真實的後端

這是我的示例代碼:第一個測試會調用模擬。第二個將稱爲真正的後端。

var LoginPage = require('./login_page'); 

describe('As a user, when using valid credentials', function() { 

    var login = new LoginPage(); 

    beforeEach(
     function() { 

      browser.addMockModule('myService', function() { 
       angular 
        .module('myService', ['myApp', 'ngMockE2E']) 
        .run(function($httpBackend) { 

         var access={"access_token":"a", "token_type":"bearer", "expires_in":299, "refresh_token":"a", "userName":"any", "clientId":"blah", ".issued":"Mon, 08 Jun 2015 20:47:40 GMT", ".expires":"Mon, 08 Jun 2015 20:52:40 GMT"}; 

         $httpBackend.whenPOST("https://blah.com/OAuth2Server/1.0/OAuth/Token").respond(200, access); 

         $httpBackend.whenGET(/\/*/).passThrough(); 
         $httpBackend.whenPOST().passThrough(); 

        }); 
      }); 
     }); 


    it('logins successfully', function() { 
      login 
      .navigate() 
      .login("anything", "password"); 

     browser.sleep(5000); 
     browser.ignoreSynchronization=true; 

     var currentUrl=browser.getCurrentUrl(); 
     expect(currentUrl).toBe("http://localhost:55555/#/my-jobs"); 

    }); 

}); 

describe('As a user, when using valid credentials', function() { 

    var login = new LoginPage(); 

    beforeEach(
     function() { 

      browser.addMockModule('myService', function() { 
       angular 
        .module('myService', ['myApp', 'ngMockE2E']) 
        .run(function($httpBackend) { 

         var access={"access_token":"a", "token_type":"bearer", "expires_in":299, "refresh_token":"a", "userName":"any", "clientId":"blah", ".issued":"Mon, 08 Jun 2015 20:47:40 GMT", ".expires":"Mon, 08 Jun 2015 20:52:40 GMT"}; 

         $httpBackend.whenPOST("https://blah.com/OAuth2Server/1.0/OAuth/Token").respond(200, access); 

         $httpBackend.whenGET(/\/*/).passThrough(); 
         $httpBackend.whenPOST().passThrough(); 

        }); 
      }); 
     }); 


    it('logins successfully', function() { 
      login 
      .navigate() 
      .login("anything2", "password2"); 

     browser.sleep(5000); 
     browser.ignoreSynchronization=true; 

     var currentUrl=browser.getCurrentUrl(); 
     expect(currentUrl).toBe("http://localhost:55555/#/my-jobs"); 

    }); 

}); 
+0

通常情況下,通過'browser.addMockModule'方法來完成嘲笑,這樣每次執行'browser.get'時,模塊就會隨着頁面一起被加載。請提供給您麻煩的代碼。 –

+0

請參閱上面的編輯註釋。謝謝你的幫助。 – user3715752

+0

正如您所見,每個測試都具有完全相同的設置。我只是這樣分開它,因爲我的實際測試有不同的期望和響應數據。但不管如何,上面的確切代碼都會在第一個測試中傳遞,但第二個不會讓我登錄。看着小提琴手,第二個測試就是調用真正的後端。 – user3715752

回答

0

我完全不知道爲什麼這個問題時(發生在我身上也一樣),但是我能「修復」它通過在結束每描述重新啓動瀏覽器。只是重新加載它不適合我。

添加以下內的每個描述

afterAll(function() { 
    // need this to avoid problems with ngmocke2e 
    browser.restart(); 
}); 

我知道這不是一個理想的解決方案,並增加了一些額外的時間來測試,但是這確實的伎倆現在。

相關問題