尝试使用Jest和Enzyme对以下代码运行测试。该代码实际上正在传递,但不影响其覆盖范围。只是想知道我可以添加什么才能正常工作并增加测试覆盖率
这是函数:
async getCurrencies() {
const { user, services } = this.props;
let types = response.body ? response.body.value : null;
let response = await DropdownModels.getCurrencies({ user, services })
let temp = types.map((type) => {
return {
label: type.Name,
value: type.Currency1,
}
})
this.setState({ CurrencyOptions: temp });
}
这是我的测试用例:
it ('Test getCurrencies function ',async() => {
wrapper.setProps({
user:{},
serviceS:{},
})
wrapper.find('TransactionForm').setState({
CurrencyOptions:[[]]
});
wrapper.update();
await expect(wrapper.find('TransactionForm').instance().getCurrencies('test')).toBeDefined();
});
也尝试了以下方法
const spy = jest.spyOn(wrapper.find('TransactionForm').instance(), 'getCurrencies');
await expect(spy).toBeCalled()
但是使用spy会出现以下错误:
expect(jest.fn()).toBeCalled()
Expected mock function to have been called.
答案 0 :(得分:1)
首先,让我们从编写测试的基本概念开始。
我应该测试什么?
所有代码行都应该经过测试,以实现尽可能高的覆盖率-肯定是〜100%。另一方面,在某些情况下,该百分比可能不可靠。
我为什么要处理测试?
测试有助于确定以前的实现是否由于新功能而被破坏。您只需要“按一下按钮”即可,而无需手动进行验证。
在基本和高级方面还有许多其他概念,但让我们尝试使清单简短,然后跳回问题的详细内容。
为了坚持上面的例子,让我留下一些看法。
it('Test getCurrencies function', async () => { ... });
此测试描述未说明此案的意图。它测试功能,但是如何?它涵盖功能的哪些部分?没有描述中的具体细节,很难回答这些问题。
const spy = jest.spyOn(wrapper.find('TransactionForm').instance(), 'getCurrencies');
我不确定TransactionForm
是什么,但是根据official documentation,它接受以下参数:
jest.spyOn(object, methodName)
您确定wrapper.find('TransactionForm').instance()
返回一个对象并且还包含getCurrencies
函数吗?
let response = await DropdownModels.getCurrencies({ user, services });
DropdownModels
也有一个getCurrencies
方法,这很奇怪-也令人困惑。这可能不是问题,但我宁愿考虑将其重命名。
最后,下面是一些测试用例示例,它们可能是您的案例的一个很好的起点:
describe("getCurrencies", () => {
it("calls `DropdownModels.getCurrencies` with `user` and `services` props", () => {
// Don't forget to set the desired props as you did it in your samples.
// Simply mock `DropdownModels.getCurrencies` with `jest.spyOn`.
});
it("sets `temp` into the state", () => {
// Test whether the expected data is set into the state.
});
});