假设我有一个some-config-package
依赖项,它导出一个名为config
的命名导出:
some-config-package
export const config = {
featureToggles: {
someFeatureToggle: false;
}
};
字符串
假设我有一个组件:
js
import React from "react";
import { config } from 'some-config-package';
import A from './A';
import B from './B';
function SomeComponent() => {
console.log('config.featureToggles.someFeatureToggle', config.featureToggles.someFeatureToggle);
return config.featureToggles.someFeatureToggle ? <A /> : <B />;
}
}
型
我想测试是否呈现了正确的内容。在这种情况下,我希望能够将featureToggle替换为true
或false
。
所以我在测试中尝试了这样的东西:
测试AB.test.js
import React from "react";
import { render, screen } from "@testing-library/react";
import { config } from 'some-config-package';
import ComponentAB from './ComponentAB.js';
jest.mock("some-config-package");
describe("ComponentAB", () => {
it.each([
['should show A when someFeature is toggled on', true],
['should show B when someFeature is toggled off', false]
])('%s', (_, someFeatureToggle) => {
config.featureToggles = {
someFeatureToggle,
};
render(<ComponentAB />);
if (someFeature === true) {
expect(screenGetByRole('heading'{ name: /Component A/i}).toBeInTheDocument();
}
if (someFeature === false) {
expect(screenGetByRole('heading'{ name: /Component B/i }).toBeInTheDocument();
}
}
});
型
好吧,这不起作用。ComponentAB
中的console.log
显示的是undefined
,而不是true
/false
,第一个测试用例失败了。第二个测试用例没有失败,因为undefined
和false
都是falsy
。
那么,我想要的东西是可能的吗?如果不可能,我应该如何测试不同的场景呢?在我的真实的世界中,有更复杂的逻辑需要测试,但这个示例代码是我遇到困难的部分。
1条答案
按热度按时间t3irkdon1#
可以使用
jest.replaceProperty(object, propertyKey, value)
。ComponentAB.js
:字符串
some-config-package.js
:型
ComponentAB.test.js
:型
测试结果:
型