小编Lau*_*vas的帖子

如何对Slick 3.x dbio组合器进行单元测试?

我有一个要对它进行单元测试的方法:

@Singleton
class RegistrationWorkflow @Inject()(userService: UserService,
                                 addUserValidator: RegisterUserValidator,
                                 db: Database) {

  def registerUser(registerForm: RegisterUserForm): Future[Vector[FormError]] = {
    val dbActions = addUserValidator.validate(registerForm).flatMap({ validation =>
      if (validation.isEmpty) {
        userService.add(User(GUID.shortGuid(),
          registerForm.username,
          registerForm.email,
          BCrypt.hashpw(registerForm.password, BCrypt.gensalt())))
          .andThen(DBIO.successful(validation))
      } else {
        DBIO.successful(validation)
      }
    }).transactionally
    db.run(dbActions)
  }
}
Run Code Online (Sandbox Code Playgroud)

addUserValidator验证表单并返回Vector表单错误。如果没有错误,则将用户插入数据库。我正在返回表单错误,因为在控制器中我将返回带有错误列表的201或400。

我为此编写了一个specs2测试:

class RegistrationWorkflowTest extends Specification with Mockito with TestUtils {
  "RegistrationControllerWorkflow.registerUser" should {
    "insert a user to database if validation succeeds" in new Fixture {
      registerUserValidatorMock.validate(testUserFormData) returns DBIO.successful(Vector())
      userServiceMock.add(any) returns DBIO.successful(1)
      val result = await(target.registerUser(testUserFormData)) …
Run Code Online (Sandbox Code Playgroud)

unit-testing scala slick

5
推荐指数
0
解决办法
711
查看次数

标签 统计

scala ×1

slick ×1

unit-testing ×1