Promise在REACTJS中不能用开玩笑的方式工作

时间:2018-11-13 17:08:43

标签: reactjs jestjs enzyme

当我尝试测试组件的快照时,我一直使用TypeError: Network request failed

这是组件

import {GetAllUsersPost} from './postdata';

    class ManageUsers extends React.Component{

        render(){
            return(
                    {...}
            );
        }

componentDidMount(){
            GetAllUsersPost(UserProfile.getId()).then((result) => {
                this.setState({
                    parsed:result,
                    loading:false
                })
            });
        }
    }

这是邮政数据

export function GetAllUsersPost(id) {
  const json = JSON.stringify({id: id})
  return new Promise((resolve, reject) => {
    fetch(BaseURL + 'allusers', BdRequest(json)).then((response) => response.json()).then((res) => {
      resolve(res);
    }).catch((error) => {
      reject(error);
    });
  });
}

这是测试文件(\ src__tests __ \ ManageUsers.test.jsx)

import React from 'react';
import ManageUsers from '../component/ManageUsers';
import Adapter from 'enzyme-adapter-react-16';
import Enzyme, {shallow,mount} from 'enzyme';
Enzyme.configure({adapter:new Adapter()});

  describe("ManageUsers", ()=>{
        const wrapper = shallow(<ManageUsers/>);
        const instance = wrapper.instance();
    let response;

    test("loading()",()=>{
        wrapper.setState({loading:false})
        response = JSON.stringify("")
        expect(JSON.stringify(instance.loading())).toBe(response);
    })
});

我知道我的错误是由于promise(当酶尝试使组件变浅时),但我无法使其起作用...

谢谢

1 个答案:

答案 0 :(得分:0)

您的测试必须设置为异步测试。例如

@Dependent

为清楚起见进行编辑-请注意,这显然未经测试,但是您需要查找的是render方法和状态中的内容,因为这是您对结果所做的全部工作。

it('should do something', async () => {
  const result = await myAsyncMethod();
});