代码之家  ›  专栏  ›  技术社区  ›  July333

在beforeach中声明变量

  •  1
  • July333  · 技术社区  · 7 年前

    我明白了

    ReferenceError:未定义initialState

    当我在中声明initialState为const时 beforeEach(()=> {... . 这不应该有效吗?

    describe('register reducer', () => {
            beforeEach(() => {
                const initialState = UsersService.getInitialUsersState();
            })
    
            it('should return the initial state', () => {
                expect(usersReducer(undefined, [])).toEqual(initialState);
            });
    
            it('Toggle isBaby or sitter', () => {
                deepFreeze(initialState);
                let newState = initialState;
                newState.isBaby = true;
    
                expect(
                    usersReducer(initialState, {
                        type: types.UsersActions.SET_TYPE,
                        payload: true
                    })).toEqual(newState);
            });
    
    2 回复  |  直到 7 年前
        1
  •  3
  •   bugs    7 年前

    虽然这是真的 beforeEach 在每次测试前运行,如果你这样做, initialState 在每个人之前

    describe('register reducer', () => {
      let initialState;
      beforeEach(() => {
          initialState = UsersService.getInitialUsersState();
      })
      ...
    
        2
  •  2
  •   brianyang    6 年前

    这个问题真的很老了,但是在这里为遇到这个问题的其他人树立一个有效的例子。你可以这样做:

    describe('register reducer', () => {
            let initialState
            beforeEach(() => {
                initialState = UsersService.getInitialUsersState();
            })
    
            it('should return the initial state', () => {
                expect(usersReducer(undefined, [])).toEqual(initialState);
            });
    
            it('Toggle isBaby or sitter', () => {
                deepFreeze(initialState);
                let newState = initialState;
                newState.isBaby = true;
    
                expect(
                    usersReducer(initialState, {
                        type: types.UsersActions.SET_TYPE,
                        payload: true
                    })).toEqual(newState);
            });