2017-08-15 75 views
1

我永遠不會直接調用WebSocket,它是Asteroid的依賴。爲什麼Jest無法加載它? 此外,這應該是一個默認create-react-app測試來檢查應用程序「呈現沒有崩潰」。但即使笑話測試說應該會崩潰,應用程序也會正常加載。Jest referenceError'is defined'

我的承諾:https://github.com/Falieson/typescript-react-asteroid-meteor/commit/ab640bee540f1f2f5da2f0fe7b4be58f75b83d28#commitcomment-23644562

> node scripts/test.js --env=jsdom --silent 

FAIL src/routes/App.test.tsx 
    ● Test suite failed to run 

    ReferenceError: WebSocket is not defined 

     at Asteroid.init (node_modules/asteroid/lib/base-mixins/ddp.js:46:67) 
     at node_modules/asteroid/lib/asteroid.js:72:33 
     at Array.forEach (native) 
     at new Asteroid (node_modules/asteroid/lib/asteroid.js:70:16) 
     at Object.<anonymous> (src/config/asteroid.ts:6:16) 
     at Object.<anonymous> (src/routes/Login.tsx:14:18) 
     at Object.<anonymous> (src/routes/App.tsx:19:15) 
     at Object.<anonymous> (src/routes/App.test.tsx:5:13) 
      at <anonymous> 
     at process._tickCallback (internal/process/next_tick.js:188:7) 

Test Suites: 1 failed, 1 total 
Tests:  0 total 
Snapshots: 0 total 
Time:  1.915s 

感謝所有幫助

回答

1

我已經被小行星竊聽了一段時間之前,我想通了,你可以指定要在構造函數中喜歡使用的WebSocket所以:

const asteroid = require('asteroid'); 
const WebSocket = require('ws'); 

const Connection = asteroid.createClass() 

const portal = new Connection({ 
    endpoint: 'ws://localhost:3000/websocket', 
    SocketConstructor: WebSocket // <-------------- HERE 
}) 
0

WebSocket類不nodejs全球存在,但在瀏覽器中它。測試時,您應該全局嘲笑或定義這個類。我從來沒有遇到這方面的問題,但我認爲你可以試試這個:

// in App.test.tsx 
const WebSocket = require('ws') 
global.WebSocket= WebSocket 

//your tests... 
+0

謝謝,但沒有解決問題 – Falieson