小编Tom*_*Tom的帖子

Axios 中的单元测试拦截器逻辑

我在 Axios 中设置了一个拦截器,它会刷新令牌,然后在初始 HTTP 响应是 401 时重试调用。

我试图通过模拟 Axios 请求返回 401 和有效响应(参见下面的简化版本)并断言它被调用两次来对这个逻辑进行单元测试。

我的问题是,因为我在嘲笑请求,拦截器似乎没有运行。我没有重试请求,而是得到了stubAuthError返回。

有什么方法可以实现我所追求的目标,还是有更好的方法来测试它?

索引.js

const axios = require('axios');

axios.interceptors.response.use(
  response => response,
  error => {
    const status = error.response ? error.response.status : null;

    if (status === 401) {
      return makeRequest();
    } else {
      return Promise.reject(error);
    }
  }
);

async function makeRequest() {
  return axios.request('url');
}

module.exports = {
  makeRequest
};
Run Code Online (Sandbox Code Playgroud)

index.spec.js

const axios = require('axios');

const { makeRequest } = require('./index');

const stubAuthError = { response: { …
Run Code Online (Sandbox Code Playgroud)

javascript jestjs axios

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

到达路由器导航更新 URL 但不是组件

我正在尝试让 Reach Router 从我的一个组件以编程方式导航。URL 已按预期更新,但未呈现路由,如果我查看 React 开发人员工具,我可以看到原始组件被列为正在显示。

如果我在新 URL 处刷新页面一次,则它会正确呈现。

我怎样才能让它渲染新路线?

下面显示了一个简化的示例,我正在使用@reach/router@1.2.1它(我使用 Redux 也可能很突出)。

import React from 'react';

import { navigate } from '@reach/router';

const ExampleComponent = props => {
  navigate('/a/different/url');

  return <div />;
};

export default ExampleComponent;
Run Code Online (Sandbox Code Playgroud)

javascript reach-router

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

带有自签名证书的 Mongo URI

我正在尝试让 Mongo URI 连接与自签名证书一起使用。

命令行工作正常,因此连接如下:

mongo mongodb://Qlik:Password1@mongobox.test:27017 --ssl --sslAllowInvalidCertificates

然而,根据文档,没有sslAllowInvalidCertificates=trueURI 连接的选项,也没有任何方法可以提供证书(无论如何,这在我的堆栈上都是一个问题)

等效的 URI:

mongo "mongodb://Qlik:Password1@mongobox.test:27017/?ssl=true&sslAllowInvalidCertificates=true"

结果是:

2019-10-17T07:19:00.490+0000 E QUERY    [js] Error: couldn't connect to server mongobox.test:27017, connection attempt failed: SSLHandshakeFailed: SSL peer certificate validation failed: unable to get local issuer certificate :
connect@src/mongo/shell/mongo.js:344:17
@(connect):2:6
exception: connect failed
Run Code Online (Sandbox Code Playgroud)

如何让 URI 连接与自签名证书一起使用?

ssl mongodb

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

无法克隆对象 &lt;tensorflow.python.keras.wrappers.scikit_learn.KerasClassifier 对象

这是关于 TF 2.0。

请在我的代码下方找到执行 GridSearch 和交叉验证的代码,这些代码sklearn.model_selection.GridSearchCV用于 mnist 数据集,效果非常好。

# Build Function to create model, required by KerasClassifier

    def create_model(optimizer_val='RMSprop',hidden_layer_size=16,activation_fn='relu',dropout_rate=0.1,regularization_fn=tf.keras.regularizers.l1(0.001),kernel_initializer_fn=tf.keras.initializers.glorot_uniform,bias_initializer_fn=tf.keras.initializers.zeros):
        model = tf.keras.models.Sequential([
        tf.keras.layers.Flatten(input_shape=(28, 28)),    
        tf.keras.layers.Dense(units=hidden_layer_size, activation=activation_fn,kernel_regularizer=regularization_fn,kernel_initializer=kernel_initializer_fn,bias_initializer=bias_initializer_fn), 
        tf.keras.layers.Dropout(dropout_rate),
        tf.keras.layers.Dense(units=hidden_layer_size,activation='softmax',kernel_regularizer=regularization_fn,kernel_initializer=kernel_initializer_fn,bias_initializer=bias_initializer_fn) 
          ])
        optimizer_val_final=optimizer_val
        model.compile(optimizer=optimizer_val, loss='sparse_categorical_crossentropy', metrics=['accuracy'])
        return model

    #Create the model with the wrapper
    model = tf.keras.wrappers.scikit_learn.KerasClassifier(build_fn=create_model, epochs=100, batch_size=10, verbose=2)

    #Initialize the parameter grid
    nn_param_grid = {
        'epochs': [10],     
        'batch_size':[128],
        'optimizer_val': ['Adam','SGD'],
        'hidden_layer_size': [128],
        'activation_fn': ['relu'],     
        'dropout_rate': [0.2],    
        'regularization_fn':['l1','l2','L1L2'],    
        'kernel_initializer_fn':['glorot_normal', 'glorot_uniform'],    
        'bias_initializer_fn':[tf.keras.initializers.zeros]    
    }
    #Perform GridSearchCV
    grid = GridSearchCV(estimator=model, param_grid=nn_param_grid, verbose=2, cv=3,scoring=precision_custom,return_train_score=False,n_jobs=-1) …
Run Code Online (Sandbox Code Playgroud)

python-3.x scikit-learn keras tensorflow tf.keras

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

创建后更新 Apollo 客户端身份验证链接

我正在使用令牌通过 Apollo Client 对我的服务器的请求进行身份验证,并复制了文档中提供的以下示例:

const httpLink = createHttpLink({ uri: 'http://0.0.0.0:3003' });

const authLink = setContext((_, { headers }) => {
  // get the authentication token from local storage if it exists
  const token = localStorage.getItem('token');
  // return the headers to the context so httpLink can read them
  return {
    headers: {
      ...headers,
      authorization: token ? `Bearer ${token}` : '',
    },
  };
});

const apolloClient = new ApolloClient({
  link: authLink.concat(httpLink),
});
Run Code Online (Sandbox Code Playgroud)

这很好用,但最终令牌会过期,我需要更新 Apollo 客户端使用的令牌。

如果不实例化新的 Apollo Client,我将如何做到这一点?

javascript apollo-client

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