【问题标题】:Where to put common data in jest tests在开玩笑测试中将公共数据放在哪里
【发布时间】:2018-04-29 19:51:21
【问题描述】:

我不知道如何组织代码进行玩笑测试。

我的所有测试都在__tests__ 下,我所有的模拟都在__mocks__ 下。现在我想在测试之间共享一些数据:它们不是现有函数的模拟,它们只是我想在不同文件中使用的一些 javascript 对象。

我应该创建一个__data__ 目录吗?

还是将它们放在__mocks__ 下?

或者在__tests__目录中没有在文件名中加入-test

【问题讨论】:

  • 在我用过的其他测试框架中,fixture这个词用来指代测试数据。

标签: javascript unit-testing jestjs


【解决方案1】:

我基本同意@Alex。

但通常,与其总是将数据移动到不同的文件,我更愿意将真实的 API 模拟数据保留在测试文件本身中的一个特定案例中。

我将它们视为 React Components 的 PropType 部分,将它们保留在测试文件的按钮处(__test____spec__*test.js*.spec.js)但在文件中,除非我必须这样做分享。

这里有一个超级简单的 axios 示例:

src/__mocks__/axios.js

export default {
  get: jest.fn(() => Promise.resolve({ data: [] })),
};

然后 axios 被模拟,因为现在如果我们想测试一个超级简单的包装 API 实用程序,例如:

import Axios from 'axios';

export const yourMethod = async () => {
  return new Promise(resolve => {
    Axios.get(`yourAPIEndPoint`)
      .then(result => {
        resolve([...result.data]);
      })
      .catch(e => {
        console.error('should treat the error', e);
      });
  });
};

对我来说,一项测试只能是:

import Axios from 'axios';
import { yourMethod } from './borrame';

describe('yourMethod TestCase', () => {
  it('it returns the data you expect', async () => {
    // Specific response for this test case.
    Axios.get.mockImplementationOnce(() =>
      Promise.resolve({
        data: yourMethodMockData,
      })
    );

    const result = await yourMethod();
    expect(result[0].id).toBe(yourMethodRawMockData[0].id);
  });
});

/**
 * Specific Test Data
 */
const yourMethodMockData = [
  {
    id: '12345',
    name: 'Name for 12345',
  },
];

即使,如果要在测试文件之外重用相同的模拟数据,我也会将此模拟数据移动到 __test__ 文件夹内的不同 .js 并将其导出以供重用。

当我必须根据 API 调用参数“生成”.json 数据时,我什至创建了mockAPIGenerators,但对我来说,遵循的一般规则始终是KIS

所以在同一个测试文件中将按钮作为常量,除非它对你来说还不够?。

【讨论】:

    【解决方案2】:

    简短的答案是您想要的任何地方。

    JavaScript 在其生命中经历了很多不同的阶段,并且有很多不同类型的人在使用它。这可能就是为什么现在大多数工具都是高度可配置的,以允许个性化(定制)。

    甚至 Jest 本身也显示出这些迹象。例如,测试匹配器将在 __tests__ 文件夹或包含 .spec.test 的文件中查找测试。

    或以视觉方式按照他们的文档:

    ├── __tests__
    │   └── component.spec.js # test
    │   └── anything # test
    ├── package.json # not test
    ├── foo.test.js # test
    ├── bar.spec.jsx # test
    └── component.js # not test
    

    关于夹具和其他测试文件,答案是一样的,没有一种方法可以做到。

    选择适合你的。

    我建议__tests__ 结构将夹具数据放置在使用它的测试附近,如果需要访问多个测试,则将其进一步向上移动到项目中,直到它位于一个公共位置。

    我的首选是tests 文件夹,以将测试、固定装置和测试与src 代码分开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-06
      • 2020-03-25
      • 1970-01-01
      • 2019-09-25
      • 2019-11-10
      • 2017-11-06
      相关资源
      最近更新 更多