Невозможно сделать снимок UITableViewController, но можно сделать снимок UIViewController
Я пытаюсь сделать снимок
UITableViewController
У меня простой тестовый класс
class FeedSnapshotTests: XCTestCase {
// Fails
func test_empty_feed_one() {
let sut = UITableViewController(style: .grouped)
sut.loadViewIfNeeded()
record(snapshot: sut.snapshot(), named: "EMPTY_FEED_ONE")
}
// Passes
func test_empty_feed_two() {
let sut = UIViewController()
sut.loadViewIfNeeded()
record(snapshot: sut.snapshot(), named: "EMPTY_FEED_TWO")
}
}
private extension FeedSnapshotTests {
func record(snapshot: UIImage, named name: String, file: StaticString = #filePath, line: UInt = #line) {
guard let imageData = snapshot.pngData() else {
return XCTFail("Failed to generate PNG data representation from snapshot", file: file, line: line)
}
let snapshotURL = URL(fileURLWithPath: String(describing: file))
.deletingLastPathComponent()
.appendingPathComponent("snapshots")
.appendingPathComponent("\(name).png")
do {
try FileManager.default.createDirectory(at: snapshotURL.deletingLastPathComponent(), withIntermediateDirectories: true)
try imageData.write(to: snapshotURL)
} catch {
XCTFail("Failed to record snapshot with error: \(error)", file: file, line: line)
}
}
}
extension UIViewController {
func snapshot() -> UIImage {
let renderer = UIGraphicsImageRenderer(bounds: view.bounds)
return renderer.image(actions: { action in
view.layer.render(in: action.cgContext )
})
}
}
На данный момент я просто пытаюсь создать
UIImage
и сохраните на диск.
Однако по какой-то причине в случае
UITableViewController
Я не могу сделать снимок вида. Если я перейду на
UIViewController
это работает.
При попытке создать
UImage
из
UITableViewController
мой тест здесь всегда терпит неудачу
guard let imageData = snapshot.pngData() else {
return XCTFail("Failed to generate PNG data representation from snapshot", file: file, line: line)
}