[swift] Quick/Nimble을 사용한 앱의 웹뷰 테스트 작성 방법

웹뷰를 포함한 앱을 개발할 때, 웹 컨텐츠의 로딩, 링크 클릭, 자바스크립트 실행 등의 동작을 정확히 테스트해야 합니다. 이때 Quick/Nimble 프레임워크를 사용하면 효율적으로 테스트 코드를 작성할 수 있습니다. 이번 글에서는 Swift에서 Quick/Nimble을 사용하여 앱의 웹뷰를 테스트하는 방법에 대해 알아보겠습니다.

1. Quick/Nimble 프레임워크 설치

먼저, Quick/Nimble을 프로젝트에 설치해야 합니다. 먼저, 프로젝트 폴더에서 터미널 창을 엽니다. 그리고 다음과 같은 명령어를 실행하여 CocoaPods를 설치합니다.

sudo gem install cocoapods

CocoaPods가 설치되었으면, 프로젝트 폴더에서 Podfile이라는 이름의 파일을 생성하고 다음 내용을 입력합니다.

platform :ios, '10.0'
use_frameworks!

target 'YourAppTarget' do
    pod 'Quick'
    pod 'Nimble'
end

YourAppTarget 부분에는 실제로 테스트하려는 앱의 타겟 이름을 입력해야 합니다.

그리고 터미널에서 다음 명령어를 실행하여 Quick/Nimble을 설치합니다.

pod install

설치가 완료되면 .xcworkspace 확장자를 가진 파일을 실행하여 프로젝트를 엽니다.

2. 웹뷰 테스트 코드 작성

이제 웹뷰를 테스트하는 코드를 작성해보겠습니다. 먼저, XCTest 대신 Quick의 테스트 코드 파일을 생성하려면, Command + N을 눌러 파일을 생성하고 “Swift File”로 설정합니다. 그리고 파일 이름을 “WebViewSpec.swift”로 변경합니다.

다음은 WebViewSpec.swift 파일에 작성할 테스트 코드 예시입니다.

import Quick
import Nimble
import UIKit
import WebKit

@testable import YourAppTarget

class WebViewSpec: QuickSpec {
    override func spec() {
        describe("웹뷰 테스트") {
            var webView: WKWebView!
            
            beforeEach {
                let configuration = WKWebViewConfiguration()
                webView = WKWebView(frame: CGRect(x: 0, y: 0, width: 320, height: 480), configuration: configuration)
                
                if let url = URL(string: "https://www.example.com") {
                    let request = URLRequest(url: url)
                    webView.load(request)
                }
            }
            
            it("웹 컨텐츠 로딩") {
                expect(webView.isLoading).toEventually(beFalse(), timeout: 5)
            }
            
            it("링크 클릭") {
                let linkURLString = "https://www.example.com/link"
                webView.load(URLRequest(url: URL(string: linkURLString)!))
                
                expect(webView.url?.absoluteString).to(equal(linkURLString))
            }
            
            it("자바스크립트 실행") {
                let javaScript = "document.querySelector('button').click();"
                
                webView.evaluateJavaScript(javaScript) { _, error in
                    expect(error).to(beNil())
                }
            }
        }
    }
}

위의 테스트 코드에서는 describe 블록 내에 테스트를 그룹으로 묶고, it 블록 내에서 개별 테스트를 작성합니다. 각 테스트는 웹뷰의 로딩 상태, 링크 클릭, 자바스크립트 실행 등을 검증합니다.

3. 웹뷰 테스트 실행

테스트 코드를 작성했으면, Cmd + U를 눌러 테스트를 실행할 수 있습니다. Xcode의 테스트 결과 창에서 결과를 확인할 수 있습니다.

Quick/Nimble을 사용하면 웹뷰를 포함한 앱의 동작을 쉽게 테스트할 수 있습니다. 이를 통해 앱의 품질을 향상시키고, 잠재적인 버그를 사전에 발견할 수 있습니다.

참고 자료