2016-12-17 106 views
0

我想先寫測試反應的組分,並不斷收到錯誤導航儀沒有定義:摩卡+陣營:

ReferenceError: navigator is not defined 

我有分量和它的一個孩子使用codemirror顯示可編輯的文字區域。問題是在codemirror中有一個導航器類型的檢查。由於我不是在瀏覽器中運行此代碼,而是在node.js中運行此代碼,因此未定義。

SO上的一些人建議設置全局變量,但它不適用於我。這裏是測試代碼:

global.navigator = { 
    userAgent: 'node.js' 
}; 

import React from 'react' 
import { shallow, render } from 'enzyme' 
import { expect } from 'chai' 
import { MessagesView } from '../../components/MessagesView' 

describe('components',() => { 
    describe('Message views',() => { 
     it('render buttons',() => { 

     }) 
    }) 
}) 

是否還有一種方法來設置導航器變量?或者,也許我可以用摩卡選項設置全局變量?

回答

2

看看這裏https://github.com/airbnb/enzyme/blob/master/docs/guides/jsdom.md

基本上你需要配置jsdom創建窗口對象爲您服務。

var jsdom = require('jsdom').jsdom; 

global.document = jsdom(''); 
global.window = document.defaultView; 
Object.keys(document.defaultView).forEach((property) => { 
    if (typeof global[property] === 'undefined') { 
    global[property] = document.defaultView[property]; 
    } 
}); 

global.navigator = { 
    userAgent: 'node.js' 
}; 

這應該放置在Mocha的設置文件中。

+0

6個月後遇到同樣的問題,發現這個答案... – Tamara

+0

我剛剛發現你的評論lol:D – damianfabian