我在 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) 我正在尝试让 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) 我正在尝试让 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 连接与自签名证书一起使用?
这是关于 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) 我正在使用令牌通过 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 ×3
axios ×1
jestjs ×1
keras ×1
mongodb ×1
python-3.x ×1
reach-router ×1
scikit-learn ×1
ssl ×1
tensorflow ×1
tf.keras ×1