2016-12-05 92 views
0

我嘗試運行我的第一個玩笑測試,但我得到這個錯誤玩笑測試,sessionStorage的不確定

FAIL src\containers\__test__\AppContainer.spec.js 
    ● Test suite failed to run 

    ReferenceError: sessionStorage is not defined 

我不知道我是否應該再得到這個錯誤,因爲我沒有測試sessionStorage的,只是想測試根容器。

--update--

import React from 'react' 
import { shallow } from 'enzyme' 
import AppContainer from '../AppContainer' 

//Tried here also 
global.sessionStorage = { 
    data: {}, 
    setItem: (key, value) => { 
    this.data[key] = value 
    }, 
    getItem: (key) => this.data[key] 
} 
describe('AppContainer',() => { 
    beforeEach(function() { 
    global.sessionStorage = { 
     data: {}, 
     setItem: (key, value) => { 
     this.data[key] = value 
     }, 
     getItem: (key) => this.data[key] 
    } 
    }) 

    it('should render self and subcomponents',() => { 
    const enzymeWrapper = shallow(<AppContainer />) 

    expect(enzymeWrapper.find('div').hasClass('grommetux-app')).toBe(true) 
    }) 
}) 

-

ReferenceError: sessionStorage is not defined 
    at Function.r.get (node_modules\oidc-client\lib\oidc-client.min.js:1:13009) 
    at new e (node_modules\oidc-client\lib\oidc-client.min.js:74:15382) 
    at new e (node_modules\oidc-client\lib\oidc-client.min.js:74:5255) 
    at n (node_modules\redux-oidc\dist\redux-oidc.js:1:1853) 
    **at Object.<anonymous> (src\utils\userManager.js:23:127)** 
    at Object.<anonymous> (src\containers\AppContainer.js:9:46) 
    at Object.<anonymous> (src\containers\__test__\AppContainer.spec.js:3:47) 
    at process._tickCallback (internal\process\next_tick.js:103:7) 

我 「使用」 的sessionStorage通過圖書館,oidc-clientjs,所以我真的不擁有控制權。

第23行,這是錯誤的來源是

import { createUserManager } from 'redux-oidc' 
.... 
const userManager = createUserManager(config) (L23) 
+0

嘗試'window.sessionStorage'代替。 –

回答

1

最簡單的方法就是模擬出redux-oidc。有兩種方法可以做到這一點。

您需要createUserManager不同的行爲在有些測試:

//you need to import the module as you need to set the behaviour of 
//createUserManager in every tests 
import { createUserManager } from 'redux-oidc' 

//mock the module with an object that just holds createUserManager  
//method as a simple spy, later in your tests you can define what this 
//spy should do 
jest.mock('redux-oidc',() => ({createUserManager: jest.fn()})) 

it('should render self and subcomponents',() => { 
    createUserManager.mockImplementation(() => 'test1234`)//set the mock implementation here 
    const enzymeWrapper = shallow(<AppContainer />) 
    expect(enzymeWrapper.find('div').hasClass('grommetux-app')).toBe(true) 
}) 

createUserManager的確在一些測試中相同的:

//mock the module with an object that just holds createUserManager 
//method as a simple function that always returns 'test1234' 
jest.mock('redux-oidc',() => ({createUserManager:() => 'test1234'})) 

it('should render self and subcomponents',() => { 
    const enzymeWrapper = shallow(<AppContainer />) 
    expect(enzymeWrapper.find('div').hasClass('grommetux-app')).toBe(true) 
}) 
+0

謝謝,請參閱更新。仍然出現錯誤 – chefcurry7

+0

您能否發佈使用'sessionStorage'的代碼? –

+0

我更新了問題,謝謝。 – chefcurry7