[SwiftUI] [UnitTest] テストの作り方 ( Toggle 編)

SwiftUI component UITest シリーズ Toggle 編

Toggle

対象要素の取得

Accessibility ID を付与することで、他の要素と同じように取得できます。

XCUIElementTypeQueryProvider からの取得には、switches を使用します。

Toggle を取得

  let app = XCUIApplication()
  app.launch()

  let toggle = app.switches["MyToggle"]

状態をチェック

状態は、value プロパティに保持しています。

ただし、String です。

ON 状態では、"1" を、OFF 状態では、"0" を持ちます。

操作

.tap() を行うことで、トグル動作を行います。

テストコード例

以下は、デフォルトが OFF のToggle を、タップ後に ON になっているかを確認するコードです。

Toggle テスト例

  let app = XCUIApplication()
  app.launch()
  
  let toggle = app.switches["MyToggle"]
  XCTAssertTrue(toggle.exists)
  // (1)
  XCTAssertEqual(toggle.value as! String, "0")

  // (2)
  toggle.tap()
  // (3)
  XCTAssertEqual(toggle.value as! String, "1")
コード解説
  1. デフォルトで Off 設定になっていることをテスト
  2. Toggle に対して、タップしています
  3. タップ後に、On になっていることをテスト

アプリと、テストコード例

画面には、Toggle と Text が表示されていて、Toggle の状態に応じて Text のラベルを Onと Off に切り替えるアプリです。

Toggle テストアプリ

「Toggle テストアプリ」

Toggle テストアプリ

//
//  ContentView.swift
//
//  Created by : Tomoaki Yagishita on 2020/10/28
//  © 2020  SmallDeskSoftware
//

import SwiftUI

struct ContentView: View {
  @State private var isOn:Bool = false
  var body: some View {
    VStack {
      Toggle("toggle", isOn: $isOn)
        .accessibility(identifier: "MyToggle")
        .padding()
      Text(isOn ? "On" : "Off")
        .accessibility(identifier: "MyToggleText")
        .padding()
    }
  }
}
Toggle アプリ テストコード

  func testToggle() throws {
    let app = XCUIApplication()
    app.launch()
    
    let toggle = app.switches["MyToggle"]
    XCTAssertTrue(toggle.exists)
    XCTAssertEqual(toggle.value as! String, "0")

    let text = app.staticTexts["MyToggleText"]
    XCTAssertTrue(text.exists)
    XCTAssertEqual(text.label, "Off")
    
    toggle.tap()
    XCTAssertEqual(toggle.value as! String, "1")
    XCTAssertEqual(text.label, "On")
  }

まとめ:SwiftUI の Toggle をテストする

SwiftUI の Toggle をテストする
  • XCUIApplication から、accessibility ID 指定で Toggle を取得することができる
  • XCUIApplication から、switches["ID"] で Toggle を取得することができる
  • Toggle の状態は、value プロパティから String として取得できる
  • SwiftUI では、accessibility ID は、.accessibility modifier で付与する

説明は以上です。
不明な点やおかしな点ありましたら、ご連絡いただけるとありがたいです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です