【发布时间】:2017-04-18 14:41:59
【问题描述】:
我在 React Native 项目中的一些测试会影响全局对象。这些更改通常会影响依赖相同对象的其他测试。
例如:一个测试检查是否正确添加了侦听器,第二个测试检查是否正确删除了侦听器:
// __tests__/ExampleClass.js
describe("ExampleClass", () => {
it("should add listeners", () => {
ExampleClass.addListener(jest.fn());
ExampleClass.addListener(jest.fn());
expect(ExampleClass.listeners.length).toBe(2);
});
it("should remove listeners", () => {
const fn1 = jest.fn();
const fn2 = jest.fn();
ExampleClass.addListener(fn1);
ExampleClass.addListener(fn2);
expect(ExampleClass.listeners.length).toBe(2);
ExampleClass.removeListener(fn1);
expect(ExampleClass.listeners.length).toBe(1);
ExampleClass.removeListener(fn2);
expect(ExampleClass.listeners.length).toBe(0);
});
});
第二个测试会自行运行良好,但在所有测试都运行时失败,因为第一个测试没有清理 ExampleClass。我是否总是必须在每次测试中手动清理此类内容?
似乎我不明白 Jest 中的作用域是如何工作的……我假设每个测试都将在新环境中运行。有这方面的文档吗?
其他示例包括模拟外部库并检查其中的模拟函数是否被正确调用或将 Platform.OS 覆盖到 ios 或 android 以测试特定于平台的实现。
【问题讨论】:
标签: javascript unit-testing jestjs