最好是在测试中定义包装器吗?

时间:2018-09-23 02:24:17

标签: javascript ecmascript-6 jestjs

最佳做法是什么?为什么? -

我定义了每个测试中的包装器

it('renders correctly', () => {
    const wrapper = shallow(<App.WrappedComponent />);
    expect(wrapper).toMatchSnapshot();
});

it('tests something else', () => {
    const wrapper = shallow(<App.WrappedComponent />);
    const title = wrapper.find('AppTitle');
    expect(title.childAt(2).text()).toBe('React App!');
});

我定义了每个测试之外的包装器

const wrapper = shallow(<App.WrappedComponent />);
it('renders correctly', () => {
    expect(wrapper).toMatchSnapshot();
});

it('tests something else', () => {
    const title = wrapper.find('AppTitle');
    expect(title.childAt(2).text()).toBe('React App!');
});

只是想在测试之外定义任何内存问题等等。

1 个答案:

答案 0 :(得分:0)

测试代码遵循与其他代码相同的原理。 特别是,您不应不必要地重复自己。

您可以使用beforeEach重新创建每个测试所需的对象。 现在,让我们了解一下您向我们展示的替代方案的利弊:

优点:

  • 易于阅读,只有一个中心定义(也适用于beforeEachbeforeAll
  • 如果包装器的创建在计算上很昂贵,则可能会更快(应进行测试)

缺点:

  • 如果包装器具有某种状态,则一个测试可能会将其更改并泄漏给其他测试,这可能不是您在测试套件中想要的
  • 如果未在所有测试中使用包装器,则您将其保存在内存中的时间超过了必要的时间(垃圾收集器可能无法收集它),这实际上增加了内存使用率。如果您仅运行一些快速测试,则可能无法忽略。

我对通用单元测试方案的个人建议是,尽可能少的假设是:使用beforeEach方法为每个测试重新创建您的SUT(被测对象)。

这将最大程度地减少测试之间的状态交互,并且您只能在一个地方定义它。