2016-12-05 99 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