2010-07-28 15 views
0

Est-ce que quelqu'un sait ce qui est arrivé à controller.redirectArgs.action dans la dernière version de Grails (1.3.3)? Il fonctionnait correctement mais maintenant je reçois NPE quand je l'utilise.Grails 1.3.3: controller.redirectArgs.action non rempli

class FooController { 
    def someRedirect = { 
     redirect(action:"bar") 
    } 
} 

class FooControllerTests extends grails.test.ControllerUnitTestCase { 
    void testSomeRedirect() { 
     controller.someRedirect() 
     assertEquals "bar", controller.redirectArgs.action 
    } 
} 

Dans ce cas controller.redirectArgs est déjà nul ...

Répondre

0

drôle, je suivais la documentation ici: http://www.grails.org/Testing+Controllers

J'appelle: assertEquals "nextAvailable", controller.redirectArgs .action

et je reçois ce qui suit:

junit.framework.AssertionFailedError: junit.framework.AssertionFailedError: expected:<nextAvailable> but was:<com.***.***.XxxxXxxxController$_closur[email protected]> 

Il semble que je récupère une fermeture et j'essaie de comprendre comment obtenir le nom de l'action.

J'ai trouvé la solution ici: www.ibm.com/developerworks/java/library/j-grails10209/index.html?ca=drs-

Si vous faites un rapide ctrl/cmd + F, vous constaterez que ce assert passe:

assertEquals controller.nextAvailable, controller.redirectArgs.action 

cela passe ainsi:

assertEquals controller.nextAvailable, controller.redirectArgs[action] 
1

j'avais le même problème avec la comparant l'action à une chaîne. ce qui suit a fonctionné pour moi, où

Le contrôleur ressemble à quelque chose comme:

class SomeObjectController { 

    def index = { redirect(action:list,params:params) } 

    def list = { 
    params.max = Math.min(params.max ? params.max.toInteger() : 10, 100) 

    [ 
     someObjectInstanceList: someObject.list(params), 
     somObjectInstanceTotal: someObject.count() 
    ] 
    } 
} 

et la classe de test ressemblerait à quelque chose comme:

class SomeObjectControllerTests extends ControllerUnitTestCase { 
    void testIndexRedirectToListAction(){ 
     controller.index() 
     assertEquals controller.list, controller.redirectArgs.action 
    } 
}