【发布时间】:2020-05-17 08:26:04
【问题描述】:
我正在尝试为我的一个 ViewController 实施单元测试,其中包含由 Swift 的 Eureka 表单生成的大量表单。
代码编译良好,但在执行测试时收到两个错误。
- 未定义符号:Eureka.BaseRow 的标称类型描述符
- 未定义符号:Eureka.Form.allRows.getter:[Eureka.BaseRow]
我的测试文件中的代码
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.
}
}
}
来自视图控制器的相关代码
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
}
}
【问题讨论】:
-
您找到解决此问题的方法了吗?
-
是的!解决方案是在 UIWindow 中加载 VC。看我的回答
标签: ios xcode unit-testing eureka-forms