2015-03-18 3 views
1

На моем маршруте спрей я передаю актеру процесс обработки запроса. RequestContext отправляется в сообщении этому игроку.Проверка маршрута распыления с помощью Akka TestProbe

path("mypath") { 
    parameters("thing".as[String]) { thing => ctx => 
    myActor ! ProcessThingAndResondToContext(thing, ctx) 
    } 
} 

В моем тесте, я заменить TestProbe для актера, так как обработка актера дорого.

class MySpec extends Specification with Specs2RouteTest with ScalaCheck with MyService { 
    val testProbe = TestProbe() 
    override val myActor = testProbe.ref 

    def is = s2""" 
    it should $doTheRightThing 
    """ 

    def doTheRightThing = { 
    Get(s"/mypath?thing=fruit") ~> route ~> check { 
     testProbe.expectMsgClass(classOf[ProcessThingAndResondToContext]) 
     status mustEqual StatusCodes.Success 
    } 
    } 

Эта спецификация терпит неудачу, потому что нет status. TestProbe ничего не делает, поэтому ctx никогда не отвечал.

Request was neither completed nor rejected within 1 second 

Линия status mustEqual StatusCodes.Success не имеет решающего значения для моего теста, но я не могу удалить его, потому что тогда спецификации не компилируется - метод больше не typechecks как MatchResult.

Как я могу проверить маршрут, делегированный актеру?

ответ

0

Я не решил вопрос, но решил решить эту проблему, используя TestActorRef вместо TestProbe. Затем я мог бы указать упрощенное поведение и ответить на ctx.

Смежные вопросы