小编Alb*_*ses的帖子

如何使用 Jest 使用新的 React Router Hooks 模拟 history.push

我正在尝试history.push在新useHistory钩子上模拟react-router并使用@testing-library/react. 我只是像这里的第一个答案一样嘲笑模块:How to test components using new react router hooks?

所以我在做:

//NotFound.js
import * as React from 'react';
import { useHistory } from 'react-router-dom';


const RouteNotFound = () => {
  const history = useHistory();
  return (
    <div>
      <button onClick={() => history.push('/help')} />
    </div>
  );
};

export default RouteNotFound;
Run Code Online (Sandbox Code Playgroud)
//NotFound.js
import * as React from 'react';
import { useHistory } from 'react-router-dom';


const RouteNotFound = () => {
  const history = useHistory(); …
Run Code Online (Sandbox Code Playgroud)

reactjs jestjs react-router react-router-dom react-testing-library

34
推荐指数
2
解决办法
3万
查看次数

测试扩展类时开玩笑模拟 ES6 基类的方法(超级方法)

在测试扩展类时,测试使用某些参数调用原始方法(来自基类)时遇到问题。我要测试的类是:

// ApiDataSource.js
import { RESTDataSource } from "apollo-datasource-rest";

export default class ApiDataSource extends RESTDataSource {
  constructor() {
    super();
    this.baseURL = 'test';
  }

  //We add the authorization params to the get method
  async get(path, params = {}, init = {}) {
    return super.get(
      path,
      {
        ...params,
        app_id: "test app id",
        app_key: "test app key",
      },
      init
    );
  }
}

Run Code Online (Sandbox Code Playgroud)

基本上,我想模拟super.get()断言,当ApiDataSource.get()被调用时,super会使用授权参数调用该方法。

就像是:

// ApiDataSource.test.js
import ApiDataSource from './ApiDataSource'

// ...
test("adds the authorization parameters to …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing jestjs apollo-server

6
推荐指数
1
解决办法
5870
查看次数

gRPC 节点:如何设置另一个消息类型的字段(本身具有多种类型)

我想要实现的是我有一个.proto文件:

message Request {
    Error error = 1;
    bool success = 2;
}

message Error  {
   int32 status = 1;
   string message = 2;
}
Run Code Online (Sandbox Code Playgroud)

我对其进行编译,以便为客户端和服务生成文件。然后,当我想设置grpc生成的内容时setError(),我必须传递给函数什么?(匹配错误消息)。一个对象,例如:

{
status: 200,
message: "Success!"

}
Run Code Online (Sandbox Code Playgroud)

不起作用...有效的是:

const error = new Client.Error();
error.setMessage('Something');
error.setStatus(400);
Run Code Online (Sandbox Code Playgroud)

然后,如果我有一条请求消息:

const request =  new Client.Request()
request.setError(error)
Run Code Online (Sandbox Code Playgroud)

这可行,但我想知道是否可以直接将对象传递给 setError,而不必单独设置每个字段......

protocol-buffers node.js grpc

2
推荐指数
1
解决办法
968
查看次数

React Router Switch 语句中的路由分组为内部组件,不会转到 Not Found 路由

如果未找到路线,我正在尝试呈现“未找到”页面。我将路线分成模块。因此,当我执行 switch 语句时,在 switch 的底部添加未找到的页面,例如:

const AccessRoutes = () => {
return (
    <React.Fragment>
        <Route path="/login" exact component={Login}/>
        <Route path="/register" exact component={Register} />
        <Route path="/forgot-password" exact component={ForgotPassword}/>
    </React.Fragment>
       )
}
export default () => {
    return (
     <Switch>
         <AccessRoutes/>
         <Route render={() => <div>Not found</div>}
     </Switch>
    )
}
Run Code Online (Sandbox Code Playgroud)

当您输入不在 上的路径时,未找到的路径永远不会匹配AccessRoutes,例如/hey显示空白屏幕。如果我放置路由而不将它们包装在另一个组件中,它就可以工作。

我缺少什么?

reactjs react-router react-router-v4 react-router-dom

1
推荐指数
1
解决办法
1188
查看次数