- Mastering React Test:Driven Development
- Daniel Irvine
- 273字
- 2021-06-24 14:45:08
Extracting out a field-finder function
Both of our tests include the following line, which reaches inside the form to pull out the firstName field:
const field = form('customer').elements.firstName;
This DOM manipulation is not related to what we're testing: while we care about the value of field, we are not interested in how the DOM API works.
We can improve the readability of our tests by keeping code within tests at a high level of abstraction, and extracting lower-level logic into helper methods. Since our tests are passing at the moment, now is a great opportunity to refactor.
Extract this field variable into a new function called firstNameField, as shown:
const firstNameField = () => form('customer').elements.firstName;
In the process of converting this variable into a function, we renamed it from field to firstNameField. A short, generic variable name such as field is fine inside the short scope of a single test. But once you pull the variable up into the describe scope, you need to be more specific in your naming.
The last test we wrote now simplifies to this:
it('includes the existing value for the first name', () => {
render(<CustomerForm firstName="Ashley" />);
expect(firstNameField().value).toEqual('Ashley');
});
Update the first test in the same way:
it('renders as a text box', () => {
render(<CustomerForm />);
expectToBeInputFieldOfTypeText(firstNameField());
});
It's worth pointing out here that, if we hadn't extracted the three expectations into this function, we could have called this new function three times, rather than calling it once and saving that value in a variable. I probably wouldn't do this in my production code, but it's fine in tests; readability is more important than minimizing computation:
expect(firstNameField()).not.toBeNull();
expect(firstNameField()).toEqual('INPUT');
expect(firstNameField()).toEqual('text');
- Learning Cython Programming
- Mastering Adobe Captivate 2017(Fourth Edition)
- LabVIEW2018中文版 虛擬儀器程序設計自學手冊
- Game Programming Using Qt Beginner's Guide
- Java EE框架整合開發入門到實戰:Spring+Spring MVC+MyBatis(微課版)
- 算法大爆炸:面試通關步步為營
- Python Tools for Visual Studio
- 假如C語言是我發明的:講給孩子聽的大師編程課
- Citrix XenServer企業運維實戰
- Mastering Docker
- 微課學人工智能Python編程
- Flink技術內幕:架構設計與實現原理
- Java Web開發基礎與案例教程
- Android智能手機APP界面設計實戰教程
- Java程序設計及應用開發