在开玩笑测试中将常用数据放在何处

rpa*_*ani 13 javascript unit-testing jestjs

我不确定如何组织开玩笑测试的代码.

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

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

还是把它们放在一边__mocks__

或者在__tests__没有放入-test文件名的目录中?

Ale*_*lex 10

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

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
Run Code Online (Sandbox Code Playgroud)

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

选择对你有用的东西。

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

我的偏好是一个tests文件夹,用于将测试、固定装置和测试与src代码分开。


rob*_*ovg 6

我基本同意@Alex 的观点。

但通常情况下,我更喜欢在测试文件本身中保留特定情况的真实 API 模拟数据,而不是总是将数据移动到不同的文件。

我将它们视为PropTypeReact Components 的部分,将它们保留在测试文件的按钮处(__test____spec__*test.js*.spec.js,但位于文件内部,除非我必须共享。

这是 axios 的一个超级简单的例子:

src/__mocks__/axios.js

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

然后 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);
      });
  });
};
Run Code Online (Sandbox Code Playgroud)

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

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',
  },
];

Run Code Online (Sandbox Code Playgroud)

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

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

因此,将按钮作为同一测试文件中的常量,除非它对您来说还不够。