Exclude SwiftUI previews from code coverage?

Viewed 1498

I'm having trouble getting my code coverage up to min. 90% because XCode takes the PreviewProvider into account.

What should I do? Remove all the SwiftUI previews? Or is there a way I can exclude some lines with 'PreviewProvider' keywords etc.

Xcode ver 12.0 Jenkins for CI slather & cobertura for code coverage

Side question, there is no official test suite available for unit testing SwiftUI components. Do you guys not test them at all, or use third party libraries? I've been using ViewInspector but i dislike that to track the updated state of the component, I need to include testing code in the actual codebase itself.

1 Answers

Here is a description of working approach (demo with Xcode 13 / iOS 15):

  1. Add explicit Testing (name as you want) configuration for UT

demo1

  1. Add conditional macro TESTING (name as you want) for Testing configuration

demo2

  1. Put preview provider into condition like
struct ContentView: View {
    var body: some View {
        Text("Hello, world!")
            .padding()
    }
}

#if !TESTING
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
#endif
  1. Set Testing configuration for UT schema

demo3

  1. Run UT and observe coverage

demo4

Related