2016-12-06 2 views
1

Я следующий тест для компонента Акко:не найдено: значение expectMsg

import somePackage.SomeActor 
import akka.actor.{ActorSystem, Props} 
import org.scalatest.{FlatSpec, Matchers} 

class SomeActorSpec extends FlatSpec with Matchers { 

    val system = ActorSystem() 
    val someActorRef = system.actorOf(Props(classOf[SomeActor])) 


    it should "check the id" in { 
    someActorRef ! CheckIfJobIsRunning(UUID.randomUUID) 
    expectMsg(SomeOtherMessage(List())) 
    } 

} 

Я получаю ошибку:

not found: value expectMsg 
[error]  expectMsg(SomeOtherMessage(List())) 

У меня есть два вопроса:

1.How может Я использую expectMsg?

2.Where я определяю, SomeOtherMessage, который должен быть принят испытательным классом?

ответ

2

Использование TestKit scope. Ваш пример должен выглядеть так:

class SomeActorSpec extends FlatSpec with Matchers { 
    it should "check the id" in new Scope { 
    someActorRef ! CheckIfJobIsRunning(UUID.randomUUID) 
    expectMsg(SomeOtherMessage(List())) 
    } 

    abstract class Scope extends TestKit(ActorSystem()) { 
    val someActorRef = system.actorOf(Props(classOf[SomeActor])) 
    } 
} 

Дополнительная информация в docs. Что касается вашего вопроса:

  1. Используйте expectMsg, чтобы проверить, что актер посылает SomeOtherMessage в какой-то другой актер, когда он получает CheckIfJobIsRunning
  2. Определение CheckIfJobIsRunning, SomeOtherMessage и другие в какой-то протокол, как файл, который содержит все сообщения, связанные с вашим актером. Я лично использую сопутствующий объект актера, чтобы указать все эти мелочи.