     setTimeout(=>
       deepEqual @app.dispatch.lastCallArguments, ["/"]
       start()
-    , 15)
+    , ASYNC_TEST_DELAY)
 
   asyncTest "should start routing for aribtrary routes", 1, ->
     window.location.hash = "#!/products/1"

      @controller = TestApp.TestController.sharedInstance
    teardown: ->
      @app.stopRouting()

  test "should match simple routes", ->
    spyOn(@controller, "show")

    setTimeout(=>
      deepEqual @app.dispatch.lastCallArguments, ["/products/1"]
      start()
    , ASYNC_TEST_DELAY)

  asyncTest "should listen for hashchange events", 3, ->
    window.location.hash = "#!/products/1"
    spyOn(@app, "dispatch")
    @app.startRouting()
    setTimeout(->
      window.location.hash = "#!/products/2"
    , ASYNC_TEST_DELAY)
    setTimeout(=>
      equal @app.dispatch.callCount, 2
      deepEqual @app.dispatch.calls[0].arguments, ["/products/1"]
      deepEqual @app.dispatch.calls[1].arguments, ["/products/2"]
      start()
    , ASYNC_TEST_DELAY*2 + 100)

  test "should redirect", ->
    spyOn(@app, "dispatch")
