Как проверить контроллер представления с файлом 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"))
        }
    }

}

Но когда вы запускаете тест, ничего не происходит только с "test fail". Я устанавливаю точку останова внутри spec(), но она просто проходит.(Ничего не происходит)

После удаления файла xib и программного создания компонентов пользовательского интерфейса тест в конце концов прошел успешно.

Как проверить ViewController(viewDidLoad и т. д.), который содержит файл XIB при использовании Quick?

1 ответ

Решение

Вероятно, в вашем 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)
}
Другие вопросы по тегам