reactjs - 可以手动测试 Web 应用程序吗?
问题描述
我正在学习 TDD 并尝试按照项目中的最佳实践编写测试。一般来说,我在 React 中编写前端,在学习的过程中,我在这里找到了 Robin 的一篇关于使用 react-testing-library 进行测试的好文章。我将使用 Robin 网站上的示例,但我在网上找到的其他示例也类似。因此,搜索用户输入的组件之一如下所示:
function Search({ value, onChange, children }) {
return (
<div>
<label htmlFor="search">{children}</label>
<input
id="search"
type="text"
value={value}
onChange={onChange}
/>
</div>
);
}
一个典型的测试用例如下所示:
describe('Search', () => {
test('calls the onChange callback handler', () => {
const onChange = jest.fn();
render(
<Search value="" onChange={onChange}>
Search:
</Search>
);
fireEvent.change(screen.getByRole('textbox'), {
target: { value: 'JavaScript' },
});
expect(onChange).toHaveBeenCalledTimes(1);
});
});
我的问题:
- 我们不能手动测试这个(或类似的场景)吗?
- 在浏览器上通过几次点击和输入来测试组件是否按预期工作是不是很容易和直观?
我认为唯一的缺点是要复制测试,我必须再次点击几下。
仅仅为了验证组件在某些用户操作后呈现它,模拟 api、回调等感觉有点矫枉过正。
当然,我在这里遗漏了一些东西。任何澄清都非常感谢。
解决方案
一切都有优点和缺点。TDD(行为驱动开发、单元测试、集成测试)的优点如下:
您将不得不编写干净的代码。我的意思是你的方法/功能会很小,只会做一件事。您必须将圈复杂度保持在非常低的水平以使您的测试变小,每个控制结构都需要测试(ifs、switches..)。您将避免方法中的副作用。
您将能够重构代码,因为在没有测试的情况下重构代码就像换了一个狗屎。
这对团队和大型项目都有好处,你不可能知道所有的代码。代码中的任何更改都可能破坏功能,任何错误修复都可能产生其他几个错误。TDD 帮助我们。
...
...
缺点:
- 您将不得不编写测试..更多代码。
- 在你写作之前,你必须多想。
- 在多变的项目中,您不仅要更改代码,还要更改测试
...
...
推荐阅读
- kubernetes - AWS EKS kubernetes 部署未准备好 NodePort 和 LoadBalancer 不可访问
- azure-devops - 使用 Azure DevOps 管道将标签应用到 CFN 堆栈 - 列表?
- batch-file - 自动检查批处理文件中的输入
- python - Python Pandas 使用列首字符和一组要匹配的值来查找与模式匹配的行
- java - 将给定日期与给定时区中没有时间部分的当前日期进行比较的最佳方法
- python - 如何用排名替换 Pandas 行中的值
- reactjs - 如何运行 Express-React 项目
- node.js - 找不到模块 [Yarn 环境变量]
- javascript - 拒绝后承诺链继续
- c# - 如何使用 Windows 窗体中的按钮控件更改在类级别定义的整数数组?