lundi 24 juillet 2017

Scala mock testing

I have one simple mock test:

it.should("not stop despite of exception") in new mocks {

inSequence{
  (twitterApi.getLastTweets _) expects (*) returns Future.failed(new Exception)
  (twitterApi.getLastTweets _) expects (*) returns Future.successful(Seq(tweet))
}


val probe = TestProbe()

dataflow.source(1 second, 3 seconds, twitterApi).runWith(Sink.actorRef(probe.ref, "complete"))

probe.expectMsgType[Failure](4.seconds)
probe.expectMsgType[Seq[Tweet]](8.seconds)

}

and source is

  lazy val source: (FiniteDuration, FiniteDuration, TwitterApi) => Source[Seq[Tweet], Cancellable] =
(initialDelay: FiniteDuration, period: FiniteDuration, twitterApi: TwitterApi) => {
  Source.tick(initialDelay, period, sinceId)
    .withAttributes(ActorAttributes.supervisionStrategy(Supervision.resumingDecider))
    .mapAsync(1) { x =>
      val paging = x.get.fold(new Paging()) { id =>
        new Paging().sinceId(id)
      }
      logger.debug(s"Running twitter request with $paging")
      twitterApi.getLastTweets(paging)
    }
}

But the result is:

assertion failed: timeout (8 seconds) during expectMsgClass waiting for interface scala.collection.Seq

Where is the second message? it seems like the second message is missing

Aucun commentaire:

Enregistrer un commentaire