All Projects → nalexn → Viewinspector

nalexn / Viewinspector

Licence: mit
Runtime introspection and unit testing of SwiftUI views

Programming Languages

swift
15916 projects

Projects that are alternatives of or similar to Viewinspector

Movieapp
🎬 MovieApp is a Flutter application built to demonstrate the use of modern development tools with best practices implementation like Modularization, BLoC, Dependency Injection, Dynamic Theme, Cache, Shimmer, Testing, Flavor, CI/CD, etc.
Stars: ✭ 117 (-84.32%)
Mutual labels:  best-practices, unit-testing
React Cool Starter
😎 🐣 A starter boilerplate for a universal web app with the best development experience and a focus on performance and best practices.
Stars: ✭ 1,083 (+45.17%)
Mutual labels:  best-practices, unit-testing
Dagger2
Kotlin Dagger2 example project
Stars: ✭ 145 (-80.56%)
Mutual labels:  best-practices, unit-testing
Aspnetcorespa
Asp.Net 5.0 & Angular 11 SPA Fullstack application with plenty of examples. Live demo:
Stars: ✭ 1,211 (+62.33%)
Mutual labels:  best-practices, unit-testing
Unit Testing Tips
Unit testing tips by examples in PHP
Stars: ✭ 318 (-57.37%)
Mutual labels:  best-practices, unit-testing
Vstest
Visual Studio Test Platform is the runner and engine that powers test explorer and vstest.console.
Stars: ✭ 624 (-16.35%)
Mutual labels:  unit-testing
Laravel Best Practices
Laravel best practices
Stars: ✭ 7,066 (+847.18%)
Mutual labels:  best-practices
Deepstate
A unit test-like interface for fuzzing and symbolic execution
Stars: ✭ 603 (-19.17%)
Mutual labels:  unit-testing
Vue Vuex Router
vueCli3搭建的vue-vuex-router开发模版,PC、Mobile两个分支开箱即用,支持scss、vuex、axios、多语言、过滤器、仓库快速提交等
Stars: ✭ 596 (-20.11%)
Mutual labels:  best-practices
Chromedp
A faster, simpler way to drive browsers supporting the Chrome DevTools Protocol.
Stars: ✭ 7,057 (+845.98%)
Mutual labels:  unit-testing
Cmockery
A lightweight library to simplify and generalize the process of writing unit tests for C applications.
Stars: ✭ 697 (-6.57%)
Mutual labels:  unit-testing
Onboarding
A list of resources we at flyeralarm use to get new developers up and running
Stars: ✭ 648 (-13.14%)
Mutual labels:  best-practices
Awesome Security Hardening
A collection of awesome security hardening guides, tools and other resources
Stars: ✭ 630 (-15.55%)
Mutual labels:  best-practices
Applied Crypto Hardening
Best Current Practices regarding secure online communication and configuration of services using cryptography.
Stars: ✭ 690 (-7.51%)
Mutual labels:  best-practices
Php Censor
PHP Censor is an open source self-hosted continuous integration server for PHP projects.
Stars: ✭ 619 (-17.02%)
Mutual labels:  unit-testing
Testthat
An R 📦 to make testing 😀
Stars: ✭ 719 (-3.62%)
Mutual labels:  unit-testing
Robolectric
Android Unit Testing Framework
Stars: ✭ 5,372 (+620.11%)
Mutual labels:  unit-testing
Awesome Styleguides
📋 A list of styleguides
Stars: ✭ 644 (-13.67%)
Mutual labels:  best-practices
Project Guidelines
A set of best practices for JavaScript projects
Stars: ✭ 25,952 (+3378.82%)
Mutual labels:  best-practices
Nlp Recipes
Natural Language Processing Best Practices & Examples
Stars: ✭ 5,783 (+675.2%)
Mutual labels:  best-practices

ViewInspector 🕵️‍♂️ for SwiftUI

Platform Build Status codecov

ViewInspector is a library for unit testing SwiftUI views. It allows for traversing a view hierarchy at runtime providing direct access to the underlying View structs.

Why?

SwiftUI view is a function of state. We could provide it with the input, but were unable to verify the output... Until now!

Helpful links

Use cases

1. Search the view of a specific type or condition

Use one of the find functions to quickly locate a specific view or assert there are none of such:

try sut.inspect().find(button: "Back")

try sut.inspect().findAll(ViewType.Text.self,
                          where: { try $0.attributes().isBold() })

Check out this section in the guide for the reference.

2. Verify your custom view's state

Obtain a copy of your custom view with actual state and references from the hierarchy of any depth:

let sut = try view.inspect().find(CustomView.self).actualView()
XCTAssertTrue(sut.viewModel.isUserLoggedIn)

The library can operate with various types of the view's state, such as @Binding, @State, @ObservedObject and @EnvironmentObject.

3. Read the inner state of the standard views

Standard SwiftUI views are no longer a black box:

let sut = Text("Completed by \(72.51, specifier: "%.1f")%").font(.caption)

let string = try sut.inspect().text().string(locale: Locale(identifier: "es"))
XCTAssertEqual(string, "Completado por 72,5%")

XCTAssertEqual(try sut.inspect().text().attributes().font(), .caption)

Each view has its own set of inspectable parameters, you can refer to the API coverage document to see what's available for a particular SwiftUI view.

4. Trigger side effects

You can simulate user interaction by programmatically triggering system-controls callbacks:

try sut.inspect().find(button: "Close").tap()

let list = try view.inspect().list()
try list[5].view(RowItemView.self).callOnAppear()

The library provides helpers for writing asynchronous tests for views with callbacks.

FAQs

Which views and modifiers are supported?

Check out the API coverage. There is currently almost full support for SwiftUI 1.0 API, the 2.0 support is under active development.

Is it using private APIs?

ViewInspector is using official Swift reflection API to dissect the view structures. So it'll be production-friendly even if you could somehow ship the test target to the production.

How do I add it to my Xcode project?

Assure you're adding the framework to your unit-test target. Do NOT add it to the main build target.

Swift Package Manager

https://github.com/nalexn/ViewInspector

Carthage

github "nalexn/ViewInspector"

CocoaPods

pod 'ViewInspector'

How do I use it in my project?

Please refer to the Inspection guide. You can also check out my other project that harnesses the ViewInspector for testing the entire UI.

Other questions, concerns or suggestions?

Ping me on Twitter or just submit an issue or a pull request on Github.


blog venmo

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].