Testando o conteúdo de um elemento temporário com transferidor

Estou tentando testar a página de login no meu site usando o transferidor.

Se você efetuar login incorretamente, o site exibirá uma mensagem "brinde" que será exibida por 5 segundos e desaparecerá (usando$timeout)

Estou usando o seguinte teste:

  describe('[login]', ()->
    it('should show a toast with an error if the password is wrong', ()->

      username = element(select.model("user.username"))
      password = element(select.model("user.password"))
      loginButton = $('button[type=\'submit\']')
      toast = $('.toaster')

      # Verify that the toast isn't visible yet
      expect(toast.isDisplayed()).toBe(false)

      username.sendKeys("admin")
      password.sendKeys("wrongpassword")
      loginButton.click().then(()->
        # Verify that toast appears and contains an error
        toastMessage = $('.toast-message')
        expect(toast.isDisplayed()).toBe(true)
        expect(toastMessage.getText()).toBe("Invalid password")
      )
    )
  )

A marcação relevante (jade) está abaixo:

.toaster(ng-show="messages.length")
  .toast-message(ng-repeat="message in messages") {{message.body}}

O problema é otoastMessage teste está falhando (não consegue encontrar o elemento). Parece esperar a torrada desaparecer eentão executando o teste.

Eu também tentei colocar otoastMessage teste fora dothen() retorno de chamada (acho que isso é bastante redundante de qualquer maneira), mas recebo exatamente o mesmo comportamento.

Meu melhor palpite é que o transferidor vê que há uma$timeout em execução e aguarda a conclusão antes de executar o próximo teste (reffluxo de controle de transferidor) Como resolver isso e garantir que o teste seja executadodurante o tempo limite?

Atualizar:

Seguindo a sugestão abaixo, useibrowser.wait() para esperar o brinde ficar visível, depois tentou executar o teste quando a promessa foi resolvida. Não deu certo.

console.log "clicking button"
loginButton.click()

browser.wait((()-> toast.isDisplayed()),20000, "never visible").then(()->
  console.log "looking for message"
  toastMessage = $('.toaster')
  expect(toastMessage.getText()).toBe("Invalid password")
)

As instruções console.log me permitem ver o que está acontecendo. Esta é a série de eventos, o[] são o que vejo acontecendo no navegador.

clicking button
[toast appears]
[5 sec pass]
[toast disappears]
looking for message
[test fails]

Para maior clareza sobre o que está acontecendo com a torradeira: Eu tenho um serviço que essencialmente contém uma série de mensagens. A diretiva de brinde está sempre na página (o modelo é o jade acima) e observa as mensagens no serviço de brinde. Se houver uma nova mensagem, ele executará o seguinte código:

scope.messages.push(newMessage)
# set a timeout to remove it afterwards.
$timeout(
()-> 
  scope.messages.splice(0,1) 
, 
  5000
)

Isso envia a mensagem para a matriz de mensagens no escopo por 5 segundos, e é isso que faz o brinde aparecer (viang-show="messages.length")

Por que o transferidor está esperando o brinde?$timeout expirar antes de passar para os testes?

questionAnswers(5)

yourAnswerToTheQuestion