mangogan-git / jest_totuiral

source for slides https://slides.com/mangogan/jestxccc

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

cocos creator 使用单元测试,关于加载资源的问题。

iiitong opened this issue · comments

commented

您好,使用jest測試cocos creator時候,如果涉及到cc.loader.loadRes進行加載的資源,cmd會報錯,錯誤如下:

Error: cc.SpriteFrame in "resources/case" does not exist.
     at xxxxx/cocos2d-js-for-preview.js:21000:46

找了很久都沒有找到解決方案,想請教一下該如何是好。
謝謝!

其實這個主要看你最主要測試的目的是什麼(驗證業務邏輯)
最簡單的方式是把你要驗證的邏輯與資源加載的代碼分開

你遇到的錯誤是因為遊戲引擎啟動時會幫你維護一份資源列表
當你透過 cc.loader.loadRes 加載資源時才找得到
但是 jest 是不會有這個步驟的,你必須要自己模擬遊戲引擎做的這些事情
你需要自己寫一份假的 cc.loader.loadRes 來回傳你所需要的資源 (cc.Assets)

比如說

cc.loader.loadRes = (path) => {
  if(path ==='case') return new cc.SpriteFrame(); // 假的 cc.Assets
}

根據你要驗證的加載路徑回傳一份假的資源,讓測試得以往下進行
當然回傳的資源不必是真的資源,只要結構一樣讓你的測試可以進行就好

commented

@mangogan-git
謝謝您!
是這樣的,我們主要是想測試一些跟spine動畫相關的邏輯,這個邏輯和spine動畫的資源很難分開,而且假的數據又很難整理出來。
所以最好是可以直接加載到資源。

我嘗試提取了一個settings.js,然後初始化了assetLibrary,但是還是獲取不到資源。不知道您有什麼思路可以指點一下的嗎?
謝謝了!

這樣的話我會看操作 spine 的邏輯會用到哪一些 spine 的 api,
製作一個假的 spine assets 與對應的 api 介面, 傳給邏輯做處理
可以透過 jest.mock 驗證那些測試用的介面有沒有被調用、有沒有收到正確的參數
先做出有調用到的 api 就好,不用一次把所有的東西都做出來

commented

@mangogan-git 謝謝!我明白您的意思了!感謝!