Как проверить UILabel на программно добавленном UIView с XCTest - PullRequest
0 голосов
/ 11 мая 2018

Я хочу проверить .text моего dashboardLabel, но я не знаю, как получить к нему доступ через XCTest.

DashboardView.swift выглядит так:

import UIKit

class DashBoardView: UIView {

override init(frame: CGRect) {
    super.init(frame: frame)

    createSubviews()
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    fatalError("init(coder:) has not been implemented")
}

// MARK: - Create Subviews

func createSubviews() {
    backgroundColor = .white

    var dashboardLabel : UILabel

    dashboardLabel = {
        let label = UILabel()
        label.text = "Dashboard Label"
        label.textColor = .black
        label.frame = CGRect(x:60, y:80, width: 200, height: 30)
        label.backgroundColor = .green
        label.backgroundColor = .lightGray
        label.font = UIFont(name: "Avenir-Oblique", size: 13)
        label.textAlignment = .center
        return label
    }()

}

DashboardViewController.swift выглядит так:

import UIKit

class DashBoardViewController: UIViewController {

    var dashboardview = DashBoardView()

    //MARK: View Cycle
    override func loadView() {
         view = dashboardview
    }

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        title = "DashBoard"
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

Я знаю, как проверить название DashboardViewController.swift

import XCTest
@testable import DashBoard

class DashBoardTests: XCTestCase {
    func test_if_title_is_DashBoard() {

    let vc = DashBoardViewController()
    let _ = vc.view
    XCTAssertEqual(vc.navigationItem.title, "Dashboard")
}

но я понятия не имею, как получить доступ к dashboardLabel на DashBoardView.swift.

Надеюсь, это объясняет мою проблему, и любой из вас может мне помочь или указать мне правильное направление!

Thx ✌️

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Один из разработчиков программного обеспечения рассказал мне решение, которое довольно круто! Вам необходимо объявить Метку как свойство следующим образом

private(set) var dashboardLabel = UILabel()

и теперь вы можете получить доступ к свойству в XCTest. Это имеет смысл, потому что вы можете тестировать только то, что доступно извне

import UIKit

class DashBoardView : UIView {

    private(set) var dashboardLabel = UILabel()

}

XCTest Файл

import XCTest
@testable import DashBoard

class DashBoardTests: XCTestCase {
    func test_if_dashboard_label_has_title_DashBoard() {

        let vc = DashBoardView()
        XCTAssertEqual(vc.dashboardLabel.text, "DashBoard")
    }
}

Надеюсь, это поможет!

0 голосов
/ 11 мая 2018

вы можете сделать это, используя accessibilityIdentifier

См .: iOS XCUITests доступ к элементу по доступу

...