【问题标题】:How to test imports/exports with Jest?如何使用 Jest 测试导入/导出?
【发布时间】:2019-06-09 23:56:56
【问题描述】:

这是我的结构:

如您所见,我对文件 shipments.js 有 100% 的测试覆盖率,这些测试如下:

import shipmentsPagination, {
  setFilters,
  removeFilter,
  toggleFiltersModal,
  setCSVDataAction,
} from '../../actions/shipments';

describe('shipments redux actions', () => {
  it('should test setCSVDataAction', () => {
    const result = setCSVDataAction({
      itemsCount: 0,
      shipments: [],
    });

    expect(result.type).toEqual('SET_CSV_DATA');
    expect(result.payload).toEqual({
      shipmentsCSV: {
        itemsCount: 0,
        shipments: [],
      },
    });
  });

  it('should test toggleFiltersModal', () => {
    const result = toggleFiltersModal(true);

    expect(result.type).toEqual('TOGGLE_SHIPMENTS_FILTERS_MODAL');
  });

  it('should test removeFilter', () => {
    const filters = {
      shipmentId: '123',
      status: 'received',
      carrier: 'FedEx',
      shippedFrom: 'Dallas',
      shippedTo: 'NY',
      shippedDate: '10/13/2018',
      shipmentType: 'Colocation Hardware',
    };

    const result = removeFilter(filters);

    expect(result.type).toEqual('REMOVE_SHIPMENTS_FILTER');
    expect(result.payload).toEqual({ [filters]: '' });
  });

  it('should test shipmentsPagination', () => {
    const result = shipmentsPagination({
      page: 2,
      pageSize: 25,
    });

    expect(result.type).toEqual('UPDATE_SHIPMENTS_PAGINATION');
    expect(result.payload).toEqual({ page: 2, pageSize: 25 });
  });

  it('should test setFilters', () => {
    const result = setFilters({
      shipmentId: '123',
      status: 'Received',
      carrier: 'FedEx',
      shippedFrom: 'Houston - HOU02',
      shippedTo: 'Herp',
      shippedDate: '1/24/2019',
      shipmentType: 'Colocation Hardware',
    });

    expect(result.type).toEqual('SET_SHIPMENTS_FILTERS');
    expect(result.payload).toEqual({
      shipmentId: '123',
      status: 'Received',
      carrier: 'FedEx',
      shippedFrom: 'Houston - HOU02',
      shippedTo: 'Herp',
      shippedDate: '1/24/2019',
      shipmentType: 'Colocation Hardware',
    });
  });
});

如您所见,index.js 在第 1 行没有覆盖范围。

index.js是这个:

import shipments from './shipments';

export default {
  shipments,
};

那么我如何测试导入/导出以获得 100% 的测试覆盖率?

【问题讨论】:

  • 强制性“100% 的覆盖率本身并不是一个目标,您可以别管它”评论 :)
  • 不是答案,但是:您可以简单地忽略覆盖率计算中的 index.js

标签: javascript reactjs ecmascript-6 redux jestjs


【解决方案1】:

从我所看到的代码中,只需在测试中从index.js 导入shipmentsPagination

import defaultExport from '../../actions/';  // import the default export from index.js
const { shipments: shipmentsPagination } = defaultExport; // and use it to get shipmentsPagination
import {
  setFilters,
  removeFilter,
  toggleFiltersModal,
  setCSVDataAction,
} from '../../actions/shipments'; // everything else can come from shipments.js

index.js 导入shipmentsPagination 将确保index.js 中的export 行得到测试。

【讨论】:

    【解决方案2】:

    @mystackrunnethover 是对的,并不完全需要覆盖该行,但是,以防万一:

    我将这些测试用作“健全性测试”,以确保 Jest 正常运行。

    一个常见的陷阱是假设如果导入失败,imported_thing.toBeTruth() 将失败。它不会 - imported_thing 将是一个空对象,这是真的。

    这是我们使用的:

    import Account from '/account';
    
    //describe block
    
    expect(Account).toBeTruthy();
    
    expect(Object.keys(Account).length > 0).toBe(true);
    

    当然,这仅适用于Account 实际具有属性(并且应该具有)的情况。另一种方法是专门检查您期望的属性。

    【讨论】:

    猜你喜欢
    • 2020-08-08
    • 2018-04-03
    • 2020-08-24
    • 2020-12-10
    • 2021-12-09
    • 2020-06-05
    • 2016-07-12
    • 2018-03-22
    • 2018-07-25
    相关资源
    最近更新 更多