2011-01-14 60 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

相關問題