首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含Eureka表单的UnitTesting ViewController

包含Eureka表单的UnitTesting ViewController
EN

Stack Overflow用户
提问于 2020-05-17 08:26:04
回答 1查看 281关注 0票数 1

我正在尝试实现我的ViewControllers之一的单元测试,它包含由Swift的Eureka生成的大量表单。

代码编译得很好,但在执行测试时收到了两个错误。

未定义符号: Eureka.BaseRow

  • Undefined符号的标称类型描述符: Eureka.Form.allRows.getter : Eureka.BaseRow

测试文件中的代码

代码语言:javascript
复制
import XCTest
@testable import MyProject

class DataEntryViewControllerTest: XCTestCase {

    var mainvc: MyProject.DataEntryViewController!

    private func setupViewControllers() {
        let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)

        let newObject = ModelManager.createObject()
        self.mainvc = storyboard.instantiateViewController(withIdentifier: "dataEntryView") as? DataEntryViewController

        // this .dataEdit is required
        self.mainvc.dataEdit = newObject
        self.mainvc.loadView()
        self.mainvc.viewDidLoad()
    }

    override func setUp() {
        super.setUp()
        self.setupViewControllers()
    }

    override func tearDown() {
        mainvc = nil
        super.tearDown()
    }

    func testViewDidLoad() throws {
        XCTAssertNotNil(self.mainvc, "Main VC is nil")
        let form = mainvc.form

        // If i comment away both of these lines, the test would pass. 
        // having Either one of them kills the process
        XCTAssertEqual(form.allRows.first?.tag, "")
        XCTAssertEqual(mainvc.form.rowBy(tag: "date")?.baseValue as Date!, Date())
    }

    func testPerformanceExample() throws {
        // This is an example of a performance test case.
        self.measure {
            // Put the code you want to measure the time of here.
        }
    }

}

从视图控制器释放代码

代码语言:javascript
复制
import UIKit
import Eureka
import CoreData

class DataEntryViewController: FormViewController, UITextFieldDelegate {

    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

    // compulsory 
    var dataEdit: object!

    @IBOutlet weak var addOrEditButton: UIBarButtonItem!

    override func viewDidLoad() {

        super.viewDidLoad()

        let form = formPrinter()
        form.delegate = self

        // Triggers hide or show form, incase the object is coming in already locked.
        hideOrShowAllForms()
    }

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

    //MARK: - Form printer
    func formPrinter() -> Form {
        form +++ Section("Date (UTC)")
            <<< DateRow("date"){ row in
                row.disabled = Condition(booleanLiteral: self.dataEdit?.isLocked ?? false)
                } .cellSetup { cell, row in
                row.title = "Date"
                row.value = self.dataEdit == nil ? Date() : self.dataEdit?.date
                row.dateFormatter?.timeZone = TimeZone(secondsFromGMT: 0)
                cell.datePicker.timeZone = TimeZone(secondsFromGMT: 0)
            }
        return form
    }  
 }
EN

回答 1

Stack Overflow用户

发布于 2020-09-20 03:16:51

解决方案是在UIWindow中加载VC。

代码语言:javascript
复制
var vc: Simply_Log_Beta.DataEntryViewController!
    let window = UIWindow(frame: UIScreen.main.bounds)
    
    private func setupViewControllers(isFlight: Bool = true) {
        let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main)
        self.vc = storyboard.instantiateViewController(withIdentifier: "dataEntryView") as? DataEntryViewController
        window.rootViewController = vc
        window.makeKeyAndVisible()
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61848946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档