2015-07-10 3 views
0

В конечном итоге моя цель - написать специальную директиву Spray для использования различными маршрутами в существующем приложении. Я до сих пор не смог написать тест для моей новой директивы, поэтому я упростил его до тех пор, пока мой пользовательский код не был даже в игре. Я все еще не передаю то, что, по моему мнению, является тривиальным тестом. Что я делаю не так?Попытка запуска пустячного скалята на распыляемом маршруте

import org.scalatest.FlatSpec 
import spray.http.StatusCodes 
import spray.routing.{HttpService, Directives, Route} 
import spray.testkit.ScalatestRouteTest 

trait TrivialDirectivesTextFixture extends Directives { 

    def trivialRoute: Route = 
    path("test_route") { 
     get { requestContext => 
     println("get") 

     complete(StatusCodes.OK, "trivial response") 
     } 
    } 

} 

class TrivialDirectivesSpec extends FlatSpec with TrivialDirectivesTextFixture with ScalatestRouteTest with HttpService { 

    def actorRefFactory = system 

    "TrivialDirectives" should "trivially match" in { 
    Get("/test_route") ~> sealRoute(trivialRoute) ~> check { 
     println("check") 

     assertResult(StatusCodes.OK) { 
     println("status " + status) 
     status 
     } 

     assertResult("trivial response") { 
     println("response " + response) 
     responseAs[String] 
     } 
    } 
    } 
} 

Полученный выход:

get 
check 
[info] TrivialDirectivesSpec: 
[info] TrivialDirectives 
[info] - should trivially match *** FAILED *** 
[info] Request was neither completed nor rejected within 1 second (TrivialDirectivesSpec.scala:30) 

ответ

1

не хватает точки, чтобы написать комментарий

Так что я буду писать это здесь, проблема в том, что

get { 
    complete("OK") 
} 

переводится на код ниже, используя какой-то неявной

get { ctx => 
    ctx.complete("OK") 
} 

, таким образом, когда вы ПОЛУЧАЕТ {CTX => полный ("OK") }

Неправильно переведено

0

решаемые путем изменения complete() к requestContext.complete(). Я не совсем понимаю, почему, поэтому я буду благодарен за более полные ответы.

+1

Или вы просто удалите 'requestContext =>'. – jrudolph

+0

Это тоже работает @jrudolph. Благодаря! – broadmonkey