🎯 Introduction
React Native is released by a team of developers from partner companies and community volunteers who together make up the Release Crew. Before releasing it to npm, the crew must test each version. The tests include: automated unit tests (for JS, Android, iOS layers), and then the commit goes through a series of internal Meta tests. The testing process also included a mostly manual process of testing RNTester application components.
RNTester is an internal application in the React-Native repository. Its purpose is to represent components and their functions. It contains, among others, all kinds of lists, progress bars, scroll views. As one of the partner companies, the Callstack committed to creating e2e tests for the RNTester application, which would speed up the testing process. After analysis and experiments, my colleagues decided to use Appium + WebDriverIO + Jest as the technology stack.
🚀 The process
In August 2023, I started working on adding e2e tests to additional application components. My goal was to write tests that would take a relatively short time, would be reliable depending on the platform and type of equipment used for testing, and the resulting test report would be clear and easy to interpret.
After writing the first tests, my team received that the tests bring real value to the Release Crew. Before the release, the bug was found thanks to testing. This news was the motivation for the entire team.
With the increasing pool of tests, the duration of the entire test has become a real problem. We started discussing the current technology stack and analyzing what processes should be shortened to make the testing time as short as possible.
Another important topic turned out to be the instability of tests depending on the platform. To make sure that our test results are reliable, we excluded problematic tests and analyzed them thoroughly.
As each challenge was solved, new ones appeared on the horizon. All discussions in our team made two things certain: firstly, there is no challenge that cannot be overcome, and secondly: every problem can be solved in many different and more effective ways - a given solution should be adapted to the conditions, that we currently have (time we need for implementation, level of complexity, etc.)
👉 To sum up
Collaboration with Meta and Microsoft developers and my colleagues was very fruitful. I feel that I learned a lot, and thanks to the discussions I looked at many challenges from different perspectives. Although working on this project was only a “short adventure”, I really hope that the tests that have been written so far will be a guide for other developers who will want to write them and contribute to the stability of platforms such as Facebook and Instagram.