我已经写了一个传奇,它使用一个yield select来获取redux存储状态的一部分,并将其存储在局部变量中。该变量是一个具有三个不同键的对象,每个键的值是其中的一个对象数组。
我的redux-saga测试总是失败,因为我在saga中创建了这个使用初始yield select中的数据的本地变量,并且在测试中该变量始终为undefined,这会导致我在saga中的其余测试失败。我见过很多关于如何在redux saga中模拟yield select的返回状态的例子,但它总是在下一个redux-saga调用的上下文中。如何模拟局部变量的返回状态?
下面是我的代码:
export default function* orderSelectionFlow({ payload }) {
try {
const orders = yield select(getOrders); // retrieve relevant part of redux store
const activeOrder = orders[payload.orderStatus].find(order => order.id === payload.orderId); // this variable is always undefined in my tests, because I am not sure how to mock `orders` for a local variable.
const activeOrderId = payload.orderId;
const isConnected = yield select(getIsConnected); // test for this select fails because activeOrder is undefined 我的测试(直到相关的点)是
describe('test order selection flow', () => {
const navSpy = jest.spyOn(AppNavigator, 'navigate');
const action = {
type: 'galactica/orders/VIEW',
payload: {
orderStatus: 'OPEN',
orderId: 1
}
};
afterAll(() => {
jest.resetModules();
navSpy.mockRestore();
});
it.next = sagaHelper(orderSelectionFlow(action));
it.next('should get all orders', (result) => {
expect(result).toEqual(select(getOrders));
});
it.next('should use connected state', (result) => {
expect(result).toEqual(select(getIsConnected));
});Orders目前是未定义的,但如果我可以模拟它的值,它将是
orders: { 'OPEN': { orderId: 1 } }
发布于 2019-03-22 13:35:51
我会尝试使用redux-saga-tester:https://github.com/wix/redux-saga-tester。它可以让你在选项中指定初始状态。我不太确定你的所有代码是什么样子的,但我认为你可以像下面这样做。
describe('test order selection flow', () => {
const navSpy = jest.spyOn(AppNavigator, 'navigate');
const action = {
type: 'galactica/orders/VIEW',
payload: [{
orderStatus: 'OPEN',
orderId: 1
}]
};
afterAll(() => {
jest.resetModules();
navSpy.mockRestore();
});
it('should get all orders', (result) => {
const tester = new SagaTester({
initialState: {
orders: {
'OPEN': {
orderId: 1
}
}
}
});
tester.start(saga);
tester.dispatch(action);
// ... do your expects here
// You may need to use `tester.waitFor` to wait for an action to be dispatched
// If you want to expect a certain action was called, use `getCalledActions`
});https://stackoverflow.com/questions/54637983
复制相似问题