- Hands-On Design Patterns with React Native
- Mateusz Grzesiukiewicz
- 340字
- 2021-08-13 15:12:56
Snapshot testing expandable components
This time, we will demonstrate a tricky part of snapshot testing.
Let's start by creating our first snapshot test. Go to Chapter_1/Example 4_Stateful_expandable_component and run yarn test in the command line. You should see that one test passes. What kind of test is it? It's a trivial unit test that's located in the App.test.js file.
It's time to create our first snapshot test. Replace expect(rendered).toBeTruthy(); with expect(rendered).toMatchSnapshot();. It should look like this:
it('renders', () => {
const rendered = renderer.create(<App />).toJSON();
expect(rendered).toMatchSnapshot();
});
Once you have this, rerun yarn test. A new directory called __snapshots__ should be created with the App.test.js.snap file inside it. Take a look at its contents. This is your first snapshot.
It's time to test the app's coverage. You can do this with the following command:
yarn test -- --coverage
It yields something a little concerning:
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
All files| 66.67 | 50 | 50 | 66.67
App.js | 66.67 | 50 | 50 | 66.67 | 18,23,26
We have one component that has one branch (if), and after performing a snapshot test, the coverage is not even near 100%. What's wrong?
There is obviously a problem with the branch that relies on state, but would it account for over 30% of the lines? Let's see the full report. Open the ./coverage/lcov-report/App.js.html file:
Now, you see what is wrong. The answer is pretty simple—snapshot tests do not test prop functions. Why? First of all, this does not make much sense. Why would we convert a function to JSON, and how would it help? Secondly, tell me how to serialize the function. Shall I return function code as text or compute output in some other way?
Take this example as a lesson that snapshot tests are not enough.
- 黑客攻防從入門到精通(實戰秘笈版)
- Getting Started with Gulp(Second Edition)
- UML和模式應用(原書第3版)
- C++面向對象程序設計(微課版)
- C語言程序設計案例式教程
- INSTANT OpenNMS Starter
- Apache Spark 2.x for Java Developers
- C程序設計實踐教程
- .NET 4.5 Parallel Extensions Cookbook
- Kotlin極簡教程
- 小程序從0到1:微信全棧工程師一本通
- LabVIEW數據采集
- 零基礎學SQL(升級版)
- Building Apple Watch Projects
- Zend Framework 2 Cookbook