首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在jest中使用reselect createSelector函数进行测试?

在使用 Jest 测试 reselectcreateSelector 函数时,你需要确保你的测试覆盖了选择器的输入和输出。reselectcreateSelector 函数用于创建记忆化的选择器,这些选择器可以从 Redux 状态中派生数据。

以下是一个示例,展示如何在 Jest 中测试使用 createSelector 创建的选择器。

示例代码

假设你有一个 Redux 状态和一个选择器如下:

代码语言:javascript
复制
// selectors.js
import { createSelector } from 'reselect';

const getItems = (state) => state.items;
const getFilter = (state) => state.filter;

export const getFilteredItems = createSelector(
  [getItems, getFilter],
  (items, filter) => {
    return items.filter(item => item.includes(filter));
  }
);

测试代码

你可以使用 Jest 来测试这个选择器。以下是一个示例测试文件:

代码语言:javascript
复制
// selectors.test.js
import { getFilteredItems } from './selectors';

describe('getFilteredItems selector', () => {
  it('should return filtered items based on the filter', () => {
    const state = {
      items: ['apple', 'banana', 'grape', 'orange'],
      filter: 'ap'
    };

    const expected = ['apple', 'grape'];
    const result = getFilteredItems(state);

    expect(result).toEqual(expected);
  });

  it('should return all items if filter is empty', () => {
    const state = {
      items: ['apple', 'banana', 'grape', 'orange'],
      filter: ''
    };

    const expected = ['apple', 'banana', 'grape', 'orange'];
    const result = getFilteredItems(state);

    expect(result).toEqual(expected);
  });

  it('should return an empty array if no items match the filter', () => {
    const state = {
      items: ['apple', 'banana', 'grape', 'orange'],
      filter: 'xyz'
    };

    const expected = [];
    const result = getFilteredItems(state);

    expect(result).toEqual(expected);
  });

  it('should memoize the result for the same input', () => {
    const state = {
      items: ['apple', 'banana', 'grape', 'orange'],
      filter: 'ap'
    };

    const result1 = getFilteredItems(state);
    const result2 = getFilteredItems(state);

    expect(result1).toBe(result2); // Same reference
  });

  it('should recompute the result if the input changes', () => {
    const state1 = {
      items: ['apple', 'banana', 'grape', 'orange'],
      filter: 'ap'
    };

    const state2 = {
      items: ['apple', 'banana', 'grape', 'orange'],
      filter: 'ba'
    };

    const result1 = getFilteredItems(state1);
    const result2 = getFilteredItems(state2);

    expect(result1).not.toBe(result2); // Different reference
    expect(result2).toEqual(['banana']);
  });
});

解释

  1. 基本测试:测试选择器在不同过滤条件下的输出是否正确。
  2. 记忆化测试:测试选择器是否正确记忆化结果,即对于相同的输入,选择器应返回相同的引用。
  3. 重新计算测试:测试选择器在输入变化时是否重新计算结果。

运行测试

确保你已经安装了 Jest,然后在项目根目录下运行以下命令来执行测试:

代码语言:javascript
复制
npx jest

或者,如果你已经在 package.json 中配置了 Jest 脚本,可以运行:

代码语言:javascript
复制
npm test

通过这种方式,你可以确保你的 reselect 选择器在不同情况下的行为是正确的,并且记忆化功能也正常工作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券