2011-01-14 61 views
0

我想叫事件一个嘲笑域实例传递给控制器​​的秀()方法,但秀()无法找到有问题的事件,从而返回null。可以在控制器的show()方法中使用模拟域“实例”吗?

请注意,以下代码段仍在工作中。

def "trying to show an event containing malicous code"() { 
    given: "An event named with malicous code" 
    mockDomain(Event) 
    def event = Mock(Event) 
    event.title >> "<script type=\"text/javascript\">alert(\"XSS\");</script>" 
    event.id >> 1 
    // Do I have to actually create a full-blown event considering all 
    // constraints here? 

    when: "I try to show that event" 
    controller.params.id = 1 
    def result = controller.show() 

    then: "The resulting title will be encoded HTML" 
    result.eventInstance.title == event.title.encodeAsHTML() 
} 

这就是控制器节目开始()方法:

def show = { 
    def eventInstance = Event.get(params.id) 

    // The event exists 
    if (eventInstance) { 
      // some processing here 

      return [eventInstance: eventInstance, isSubscribed: sub ? true:false, sidebar: 'sidebar'] 
    } 
  1. 有没有一个简单的解决方案或将我真正创建一个完全成熟的情况下采取一切照顾限制?
  2. 如果我必须创建一个完整的事件,我将在哪里放置相应的方法? (我们目前在BootStrap.groovy中使用了一个createEvent()方法进行初始设置,因此在这里重复此功能不会是DRY)。

回答

1

嘲讽尝试通过以下方式对事件对象:

def event = new Event() 
event.title = "<script type=\"text/javascript\">alert(\"XSS\");</script>" 
event.id = 1 // optional 
mockDomain Event, [event] 

除非你的event添加实例到mockDomain通话时,您将无法与get

+0

感谢检索尤其是对于将实例添加到`mockDomain`调用的提示。我一直在想,直到今天它有什么不同。 – user569825 2011-05-24 15:58:27

相关问题