Open andrewtavis opened 2 years ago
The issues with Scribe not functioning as on Simulator means that testing should be a priority, potentially even for the next release. Specifically #96 seems difficult to test for on Simulator. One option going forward would be to integrate a device testing service like Browserstack, which is available free for open source. There's also the ability to add GitHub Actions integration, which then could function as a part of the general CI process.
Currently reviewing the following documentation @andrewtavis. Docs:
Articles:
Will have a brief summarisation by EOD. Also, checking out Browserstack. Thank you for creating all the issues š š
Youāre welcome for the issues, @SaurabhJamadagni! We can talk tomorrow if more are needed šš š
And thanks for looking into all this :) Iāll assign the both of us for research and implementation š
Hey @andrewtavis, sorry for the delay but here's a brief summarisation of the basics from the articles and docs:
We will first need to define a testing target. Each keyboard should get its own testing target, something similar to what we had seen while trying to debug. We were unable to run a breakpoint if it was directed at the wrong target.
A subclass ofĀ XCTestCaseĀ contains test methods to run in which only the methods starting with ātestā will be parsed by Xcode and available to run.
Testing is primarily using the XCAssert function. Although, vanilla XCAssert won't give the most clear explanation of why a test failed. Using the right XCAssert method can help fixing the problem easier.
They might produce the same outcome but test for different things.
XCTAssertTrue
,Ā XCTAssertFalse
,Ā XCTAssertNotEqual
,Ā XCTAssertEqual
,Ā XCTAssertNil
Ā andĀ XCTAssertNotNil
are some of the commonly used XCAssert functions.
For each unit test function you will see an empty diamond shape in the gutter on the line of the function declaration. Clicking this diamond will run the specific unit test.
Parameters used in multiple test methods can be defined as properties in your test case class. You can use theĀ setUp()
Ā method to set up the initial state for each test method and theĀ tearDown()Ā
method to clean up.
Use @testable which is a flag at compilation to access private declarations at testing without having to modify source code. (I don't completely understand how to use this yet, but thought should list anyway. Will update if I get more information)
import XCTest
@testable import TestTarget
What I learned about Test Driven Development (TDD) is that whatever function we want to test, the first step would be list out all possible cases before going to implement the logic. This includes listing out the extremities as well.
I came across a library known as Nimble, which is apparently popular for asserting instead of the standard XCAssert functions. Going through it and will check if there are any advantages to using it over the native functions.
Thanks, @SaurabhJamadagni! Will read into this all a bit when Iām back šš
Terms
Issue
Testing for Scribe and a continuous integration process would be very helpful to assure that pull requests can merged without issue. Discussions of best practices as well as how best to integrate the process into pull requests would be a first step in this issue. This would be followed by writing tests for a baseline, and then adding a
ci.yml
file to aworkflows
directory in Scribe-iOS/.github.