J'essaie de tester un contrôleur qui a un objet Command avec liaison de données.Grails: Comment testez-vous un objet de commande avec un service injecté dedans
L'objet de commande a un service injecté dedans.
Mais quand j'essaie de tester la commande objet de la méthode de service injecté est jamais trouvé qu'il est jamais « injecté »
est-il un moyen de se moquer d'un service à l'intérieur d'un objet de commande?
Méthode d'essai
void testLoginPasswordInvalid() {
mockRequest.method = 'POST'
mockDomain(User, [new User(login:"freddy", password:"realpassword")])
mockLogging(UserService) // userService mocked
MockUtils.prepareForConstraintsTests(LoginCommand)
def userService = new UserService()
def user = userService.getUser("freddy")//Gets called and returns the mockDomain
assert userService.getUser("freddy")//Passes
def cmd = new LoginCommand(login:"freddy", password:"letmein")
cmd.validate() // Fails (userService is nevr injected)
controller.login(cmd)
assertTrue cmd.hasErrors()
assertEquals "user.password.invalid", cmd.errors.password
assertEquals "/store/index", renderArgs.view
}
Procédé getUser() de la UserService ne se trouve pas
Cannot invoke method getUser() on null object
java.lang.NullPointerException: Cannot invoke method getUser() on null object
code
La méthode de connexion de l'unité de commande étant appelée,
def login = { LoginCommand cmd ->
if(request.method == 'POST') {
if(!cmd.hasErrors()){
session.user = cmd.getUser()
redirect(controller:'store')
}
else{
render(view:'/store/index', model:[loginCmd:cmd])
}
}else{
render(view:'/store/index')
}
}
L'objet de commande a un "userService" injecté dedans.
Le validateur appelle ce UserService pour trouver un utilisateur
class LoginCommand {
def userService
String login
String password
static constraints = {
login blank:false, validator:{ val, cmd ->
if(!cmd.userService.getUser()){
return "user.not.found"
}
}
}
Le userService.getUser() ressemble à ceci.
class UserService {
boolean transactional = true
User getUser(String login) {
return User.findByLogin(login)
}
}
Merci, cela a fonctionné un régal et maintenant je comprends plus – Daxon