2015-06-26 3 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(); 
}); 

Я знаю, что это не идеальное решение, и это добавляет дополнительное время на тесты, но это делает трюк сейчас.