今天嘗試將 FlexUnit (1.5)和 Robotlegs 兩個 framework 結合在一起,作為重構程式碼之用。開始還算順利,當我把假類別置換成整理過的實際類別時,測試回報「找不到 IEventDispatch 的 Inject 資訊(如下)」,造成無法開始撰寫第一個測試案例。
Error: Injector is missing a rule to handle injection into property "eventDispatcher" of object "[object TestingLogic]". Target dependency: "flash.events::IEventDispatcher", named ""
在程式碼中查了半天,就是沒有看到有任何需要 Inject 這個類型的資料。因為 Actor 是 Robotlegs 的既有類別,理論上應該不會出現缺少需要的 Inject 物件才是。所以中間一度懷疑是不是之前的同事去手動調整了的 Robotlegs 的核心程式。花了一點功夫,把 swc 解壓縮來看看,也看不出來有什麼異常⋯ (中間還查到另一段無關這次錯誤的歷史程式)
最後把焦點拉回到 Robotlegs 本身,因為 Context 本身具有發事件的能力,因此作為其 Model 元素的 Actor ,應該也是利用和 Context 一樣的物件來發事件,否則 Context 就得偵聽一大堆 EventDispatcher 所發出的事件。所以缺少 IEventDispatcher ,應該和 Context 有關,其中最可能的,就是在初始化的時候所帶入的 DisplayObjectContainer,這個類別有實作 IEventDispatcher 介面。
最後在這個地方的參數加上 new MovieClip(),就解決了這次的問題。也發現到原來在 Robotlegs 的事件發送,是依靠建構時傳入的元件,而不是由自己實作 IEventDispatcher 介面。不知道這個機制在 2.x 的版本有的改變,有機會再去試試看。
作個筆記⋯
沒有留言:
張貼留言