我正在使用快速库进行单元测试。
我正在尝试测试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"))
}
}
}
但是运行测试时,仅“测试失败”不会发生任何事情。 我在spec()中设置了断点,但它只是通过了。(什么都没发生)
在删除xib文件并以编程方式制作UI组件之后,测试终于成功了。
使用ViewController
时如何测试包含xib文件的Quick
(viewDidLoad等)?
答案 0 :(得分:0)
可能在您的QuestionViewController
初始化中,您有类似的代码:
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)
}