2016-12-05 3 views
0

Я пытаюсь запустить свой первый тест шутя, но я получаю эту ошибкуJest тестирования, 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

Try '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

Смежные вопросы