如何使用 Quick 使用 XIB 文件测试视图控制器?
How to test view controller with XIB file using Quick?
我正在使用 Quick 库进行单元测试。
我正在尝试测试 ViewController
,XIB
的视图。
我将视图与文件所有者连接起来,并将视图组件与视图控制器连接起来。
对于 viewDidLoad
测试,我访问了视图以触发 viewDidLoad()
。
这是我的代码。
override func spec() {
super.spec()
var sut: QuestionViewController!
describe("viewDidLoad") {
afterEach {
sut = nil
}
beforeEach {
sut = QuestionViewController(question: "Q1")
_ = sut.view
}
it("renders question header text") {
expect(sut.headerLabel.text).toEventually(equal("Q1"))
}
}
}
但是当 运行 测试时,只有 'test fail' 没有任何反应。
我在 spec() 中设置了断点,但它只是通过了。(没有任何反应)
删除 xib 文件并以编程方式制作 UI 组件后,测试终于成功了。
如何在使用 Quick
时测试包含 xib 文件的 ViewController
(viewDidLoad 等)?
可能在您的 QuestionViewController
init 中您有类似的代码:
init(question:String) {
//do something with a question
super.init(nibName:"QuestionNibFileName", bundle: nil)
}
这在您的主要目标中运行良好,但在测试中不起作用,因为这里的默认包不同。你应该使用 Bundle(for:type(of:self))
所以代码应该是这样的:
init(question:String) {
//do something with a question
let bundle = Bundle(for:type(of:self))
super.init(nibName:"QuestionNibFileName", bundle: bundle)
}
我正在使用 Quick 库进行单元测试。
我正在尝试测试 ViewController
,XIB
的视图。
我将视图与文件所有者连接起来,并将视图组件与视图控制器连接起来。
对于 viewDidLoad
测试,我访问了视图以触发 viewDidLoad()
。
这是我的代码。
override func spec() {
super.spec()
var sut: QuestionViewController!
describe("viewDidLoad") {
afterEach {
sut = nil
}
beforeEach {
sut = QuestionViewController(question: "Q1")
_ = sut.view
}
it("renders question header text") {
expect(sut.headerLabel.text).toEventually(equal("Q1"))
}
}
}
但是当 运行 测试时,只有 'test fail' 没有任何反应。 我在 spec() 中设置了断点,但它只是通过了。(没有任何反应)
删除 xib 文件并以编程方式制作 UI 组件后,测试终于成功了。
如何在使用 Quick
时测试包含 xib 文件的 ViewController
(viewDidLoad 等)?
可能在您的 QuestionViewController
init 中您有类似的代码:
init(question:String) {
//do something with a question
super.init(nibName:"QuestionNibFileName", bundle: nil)
}
这在您的主要目标中运行良好,但在测试中不起作用,因为这里的默认包不同。你应该使用 Bundle(for:type(of:self))
所以代码应该是这样的:
init(question:String) {
//do something with a question
let bundle = Bundle(for:type(of:self))
super.init(nibName:"QuestionNibFileName", bundle: bundle)
}