Pergunta

Estou tentando usar o calllater com o flexunit v0.9:

public function testCallLater():void {
   Application.application.callLater( addAsync(function():void {
      assertTrue(true);
   }, 1000));
}

Mas quando é executado, recebo este erro:

ArgumentError: Error #1063: Argument count mismatch on flexunit.framework::AsyncTestHelper/handleEvent(). Expected 1, got 0.
at Function/http://adobe.com/AS3/2006/builtin::apply()
at mx.core::UIComponent/callLaterDispatcher2()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8628]
at mx.core::UIComponent/callLaterDispatcher()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\UIComponent.as:8568]

Não tenho certeza de qual é o problema. O Calllater é incompatível com o FlexUnit?

Foi útil?

Solução

Primeiro, você realmente deve considerar migrar para o flexunit 4.0: http://blogs.digitalPrimates.net/codeslinger/index.cfm/2009/5/3/flexunit-4-in-360-seconds

Segundo, o CallLater deve ser usado para atrasar o processamento até o próximo quadro nas classes visuais. Sua classe de caso de teste não é uma classe visual que estende o UIComponent; portanto, você não deve tentar usar o CallLater.

Terceiro, o Addasync é usado para testar os resultados de uma operação assíncrona. Isso geralmente é usado no teste dos resultados de uma solicitação de rede, de um arquivo lido, de um evento de timer etc. É por isso que normalmente você vê um "evento" como um parâmetro na função de teste addasync (porque solicitações assíncronas usam eventos para os eventos para resultados do processo). No seu caso, você não está respondendo a uma operação assíncrona com sua chamada Addasync e, portanto, não deve estar procurando um evento na sua função de teste. Remova o evento: o parâmetro do evento e o erro desaparecerá.

No entanto, talvez você possa reformular essa pergunta para declarar o que está tentando realizar? O exemplo de código que você indicou não está realmente fazendo nada útil. Se você pode ser um pouco mais específico, podemos ajudá -lo a escrever um caso de teste melhor.

Para obter ajuda no uso de Addasync com versões mais antigas do FlexUnit, consulte este tutorial: http://life.neophi.com/danielr/2007/03/asynchrons_testing_with_flex.html

Outras dicas

Parece que você está esperando um evento, mas não conseguir um. Eu imagino que o código a seguir funcionaria.

public function testCallLater():void {
   Application.application.callLater( addAsync(function(/*removed event declaration*/):void {
      assertTrue(true);
   }, 1000));
}

Apenas caso alguém precise disso, isso funciona:

private function testCallLater():void {
    Application.application.callLater(doCallLater, [ addAsync(funcUnderTest, 1000) ]);
}

private function doCallLater(testFunc:Function):void {
    testFunc(null);  // Dummy arg necessary because of addAsync expecting one arg
}

private function funcUnderTest(e:Object = null):void {
    assertTrue(true);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top