title: Angular 6 Jasmine Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL
body: <p>I am not able to test some features of my application because sometimes (very often) protractor test fails in the beforeEach function.</p>
  
  <p>Probably I am missing something important because the test fails randomly, I found some discussion about maximize the timeouts but it doesn't solve the problem.</p>
  
  <p>I see that the <code>beforeEach</code> doesn't get executed entirely when a test fails, only the first instruction is executed ( browser.get ) then the browser still on the same page all time.</p>
  
  <p>I am trying with <code>allScriptsTimeout: 45000</code> this is some tests.</p>
  
  <pre><code>describe('Rebus', function() {
    // mi posiziono nella lista ticket dopo ogni test e clicco su nuovo ticket
  
    beforeEach(function() {
  
      browser.get(Utils.baseUrl + '/tickets');
  
      browser.wait(function() {
        return element(by.id('newTicket')).isPresent();
      }, 5000);
      element(by.id('newTicket')).click();
  
  
  
      /**Ora passo dalla lista ticket a selezione blocco*/
      browser.wait(function() {
        return element(by.id('0')).isPresent();
      }, 5000);
  
      element(by.id('0')).click();
      element(by.id('newTicket')).click();
    });
  
    it('should buy ordinary ticket eurolevel 3', function() {
      // A questo punto dovrei essere arrivato al form del nuovo ticket
      selectArea('0');
      fillLicensePlate(5, 3);
      fillCountry();
      fillPassengers();
      setEntryDate(now);
      setExitDate(now.add(1, 'd'));
  
      // vai avanti al secondo step
      element(by.id('stepperNext')).click();
  
      browser.wait(function() {
        return element(by.id('daysOfStay')).isDisplayed();
      }, 5000);
  
      // Controllo che il prezzo sia corretto e controllo i giorni di permanenza
      element(by.id('daysOfStay'))
        .getText()
        .then(function(text) {
          expect(text).toContain('1');
        });
  
      element(by.id('amount'))
        .getText()
        .then(function(text) {
          expect(text).toContain('510', 'Errore nella tariffa');
        });
  
      browser.wait(function() {
        return element(by.id('save')).isDisplayed();
      }, 5000);
  
      // salvo il ticket
      element(by.id('save')).click();
  
      // Controllo che il prezzo sia corretto e controllo i giorni di permanenza
      browser.wait(function() {
        return element(by.name('price')).isPresent();
      }, 5000);
  
      element(by.name('price'))
        .getText()
        .then(function(text) {
          expect(text).toContain('510', 'Errore nella tariffa');
        });
  
      expect(element(by.name('addPay')).isPresent()).toBeTruthy(
        'Bottone non presente'
      );
    });
  
    it('should buy HOTEL ticket eurolevel €3', function() {
      // A questo punto dovrei essere arrivato al form del nuovo ticket
      selectArea('0');
      fillLicensePlate(5, 3);
      fillCountry();
      fillPassengers();
      setEntryDate(now);
      setExitDate(now.add(1, 'd'));
  
      // Campi opzionali
      setHotelField();
      setAgencyField();
  
      // vai avanti al secondo step
      element(by.id('stepperNext')).click();
  
      browser.wait(function() {
        return element(by.id('daysOfStay')).isDisplayed();
      }, 5000);
  
      // Controllo che il prezzo sia corretto e controllo i giorni di permanenza
      element(by.id('daysOfStay'))
        .getText()
        .then(function(text) {
          expect(text).toContain('1');
        });
  
      element(by.id('amount'))
        .getText()
        .then(function(text) {
          expect(text).toContain('210', 'Errore nella tariffa');
        });
  
      browser.wait(function() {
        return element(by.id('save')).isDisplayed();
      }, 5000);
  
      // salvo il ticket
      element(by.id('save')).click();
  
      // Controllo che il prezzo sia corretto e controllo i giorni di permanenza
      browser.wait(function() {
        return element(by.name('price')).isPresent();
      }, 5000);
  
      element(by.name('price'))
        .getText()
        .then(function(text) {
          expect(text).toContain('210', 'Errore nella tariffa');
        });
  
      expect(element(by.name('addPay')).isPresent()).toBeTruthy(
        'Bottone non presente'
      );
    });
  </code></pre>