如何使用Quick测试带有XIB文件的视图控制器



我正在使用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"))
}
}
}

但是,当运行测试时,只要"测试失败"就不会发生任何事情。我在spec((中设置了断点,但它只是通过了。(什么都没发生(

在删除xib文件并以编程方式制作UI组件之后,测试终于成功了。

使用Quick时,如何测试包含xib文件的ViewController(viewDidLoad等(?

可能在QuestionViewControllerinit中有类似的代码:

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)
}

最新更新