だから私は以前にこれについて尋ね、多くのコードを変更しました。
今、ブロックしないように、detach() ブロック内の HTTPresponses を返す関数を実行しています。その後、これらは完了してクライアントに戻りますが、まだルーティングを機能させることができないようです。
私のテストでは、単一のスラッシュへのリクエストは正常に機能しますが、以下に示すこのユーザー パスの作成など、他のリクエストはすべて失敗します。理由がわからず、スプレー ルーティングは非常に多くの構成要素を使用しており、システムがどのようにうまく機能しているかを理解するのに苦労しています。
何が起こっているのかを示すかもしれないと考えて、特定のパスの周りに logRequest ブロックを挿入しようとしましたが、どれもヒットしていないようです。どんな助けでも大歓迎です。
val route: Route = {
host("fakebook.com", "www.fakebook.com") {
pathSingleSlash {
complete("pong")
} ~
pathPrefix("users") { req =>
path("newuser") {
put {
detach() {
complete(genericPut(CreateUser(req.request)))
}
}
} ~
... rest of routing
これが私のスケーラテストの外観です。単純な Put はパスしますが、newuser を使用した put はパスしません。
val createUserSuccessRequest = Put(Uri("http://www.fakebook.com/users/newuser") withQuery(F_User.lastNameString -> "Doe", F_User.firstNameString -> "John", F_User.bioString -> "i like foobar",
F_User.ageString -> "42", F_User.dobString -> dateFormatter.format(new Date(1970 - 1900, 5, 7))))
"The FakeBook route" when {
"When sending a single slash request" should {
"respond with a simple pong" in {
Get() ~> logRequestResponse("plain get final request and response")(sealRoute(route)) ~> check {
assert(responseAs[String] == "pong")
}
}
}
"Running route to create a user with PUT" should {
"forward a message to the backbone to create a new user" in {
createUserSuccessRequest ~> logRequest("create user final request and response"){sealRoute(route)} ~> check {
expectMsg(CreateUser(createUserSuccessRequest))
}
}
}
}