reactjs - 开玩笑测试 - 如何处理 JsonWebToken 响应
问题描述
我正在学习如何测试我的 redux thunk 操作,我的登录响应包括一个随机的 JsonWebToken。我编写了一个名为的变量expectedActions
,它匹配从操作返回的所有数据,除了如何处理随机字符串 (JWT)。关于如何处理这个问题的任何想法?
-- 另外,我需要传递真实的用户信息(用户名/密码)来获得LOGIN_SUCCESS
响应,否则函数会调度LOGIN_FAIL
操作。这正常吗?
/* eslint-disable no-undef */
import configureMockStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import fetchMock from 'fetch-mock';
import * as actions from '../../../redux/actions/auth';
const middleware = [thunk];
const mockStore = configureMockStore(middleware);
describe('redux async actions', () => {
afterEach(() => {
fetchMock.reset();
fetchMock.restore();
});
it('returns expected login response', async () => {
const userData = {
username: 'user',
email: 'user@gmail.com',
password: 'password',
};
const config = {
headers: {
'Content-Type': 'application/json',
},
};
fetchMock.getOnce('http://localhost:5000/api/v1/users', {
body: { ...userData },
config,
});
const expectedActions = { payload: { token: '' }, type: 'LOGIN_SUCCESS' };
// the value of the token above in the response is a randomized jwt string
const store = mockStore({});
return store
.dispatch(actions.login('user@gmail.com', 'password'))
.then(() => {
// return of async actions
const actionsResponse = store.getActions();
expect(actionsResponse[0]).toEqual(expectedActions);
});
});
});
奖励:有什么意义fetchMock
?我从另一个 StackOverflow 问题中借用了上面的代码,但我还没有理解 fetchMock 在做什么。
解决方案
我用自己的令牌“123”覆盖了响应 JWT。不过我不知道这是否正确,我也不期望对这篇文章做出回应。
const middleware = [thunk];
const mockStore = configureMockStore(middleware);
describe('redux async actions', () => {
afterEach(() => {
fetchMock.reset();
fetchMock.restore();
});
it('returns expected login response', async () => {
const expectedActions = {
payload: { token: '123' },
type: 'LOGIN_SUCCESS',
};
const store = mockStore({ alert: [], auth: { token: '123' } });
return store
.dispatch(actions.login('user@gmail.com', 'somePassword'))
.then(() => {
// return of async actions
const actionsResponse = store.getActions();
actionsResponse[0].payload.token = '123';
expect(actionsResponse[0]).toEqual(expectedActions);
});
});
});
推荐阅读
- android - Android Text To Speech - 突出显示口语
- java - 如何使条件StringUtils小于Java中的特定字符
- mongodb - 无法使用 MongoDB 更新嵌套对象值
- php - 如何修复php非法偏移错误
- java - Android studio-未能下载内容
- shopify - Shopify:如何在结账时使用 Bing 转化跟踪 (UET)?
- python - Django/Python Where to find a list of available filter functions when querying
- javascript - 如何防止搜索框崩溃?
- java - @ConditionalOnBean 不适用于手动注册的 bean
- php - 优化执行 3 个计数和分组的 MySQL 查询