如何在grails中的spock单元测试中测试方法调用和重定向的顺序?

如何在grails中的spock单元测试中测试方法调用和重定向的顺序?,grails,testing,spock,Grails,Testing,Spock,我在grails控制器方法中看到了一些奇怪的行为,这让我想创建一个测试用例,看看是否可以一致地重现这些行为。所以为了更好地理解我的问题,我将首先解释这个问题 我最近有一些奇怪的行为,当调用grails方法时,它有时没有完成所有的方法实现(基本上所有的代码都流向服务器调用),而且重定向太早。我可以通过我的服务方法仍然在运行看到这一点,但是ui已经(有时也不正确地)错误地重定向了。我试过调试它,但它也把我带到了同样的地方,。。我将使用服务方法,但可以看到已经在ui上呈现的页面。如果我能得到一个好的测

我在grails控制器方法中看到了一些奇怪的行为,这让我想创建一个测试用例,看看是否可以一致地重现这些行为。所以为了更好地理解我的问题,我将首先解释这个问题

我最近有一些奇怪的行为,当调用grails方法时,它有时没有完成所有的方法实现(基本上所有的代码都流向服务器调用),而且重定向太早。我可以通过我的服务方法仍然在运行看到这一点,但是ui已经(有时也不正确地)错误地重定向了。我试过调试它,但它也把我带到了同样的地方,。。我将使用服务方法,但可以看到已经在ui上呈现的页面。如果我能得到一个好的测试用例,我觉得这可能更容易调试

控制器代码示例:

def blam() {
   Foo foo = Foo.get(params.id)
   String msg = service.method1(foo)
   service.method2(foo)
   service.doSomething(foo)
   redirect(action:"list", controller: "blam", params: [msg:msg, *:params])
}
示例测试代码:下面的问题是它根本没有测试调用顺序,我想测试它是否以正确的顺序调用方法。我发现有几个例子说您可以调用多个then声明,但是如果我移动方法并重新运行测试,我看不出有什么区别

def "test service call order and redirect"(){
   when:
   controller.actionMethod()

   then:
   service.method1(_) * 1
   service.method2(_) * 1
   service.doSomething(_) * 1

   then:
   response.redirectedUrl == "bam/list"   
}
任何关于如何测试此场景的帮助都将不胜感激!我也知道这不是主要的问题,但是关于重定向的想法也很受欢迎!(或者我应该创建一个不同的问题?)


干杯

使用多个
然后
块:

then:
   service.method1(_) * 1

then:
   service.method2(_) * 1

then:
   service.doSomething(_) * 1

那么应该尊重顺序(请参见)

我更关心response.redirectUrl部分。我试图确保直到最后才对这段代码进行评估。我试着像上面那样使用then语句,但我交换了它们,这似乎并不重要,因为这两个测试都通过了。