Search code examples
iosswiftrx-swiftxctestcase

XcTest cases for signUp Validation using Stub provider in RxSwift


I am new to use mocking stubs could you please help any one!!

when doing signUp tests every time getting error like XCTAssertEqual failed: ("201") is not equal to ("200") .

  • How to test the hardcode signUp details without using backend data

  • How to test the response of status codes for success and failures

any help should be appreciated - ThankYou

class LoginServiceUnitTests: XCTestCase {
    var stubProvider = RxMoyaProvider<RestApi>()
    override func setUp() {
        super.setUp()
        stubProvider = RxMoyaProvider<RestApi>(stubClosure: MoyaProvider.immediatelyStub)
    }

    func testSignUpForSuccessResponse() {

        let userData = Creator()
        userData?.username = "raj@naresh.com"
        userData?.password = "password"
        userData?.displayName = "username"
        let target: RestApi = .signUp(userData!)
        stubProvider.request(target) { result in
            if case let .success(response) = result {
                XCTAssertEqual("201", String(response.statusCode))

            }
        }
    }
}

Solution

  • extension XCTest {
    
        func customStatusCodeEndPoint(_ target: (RestApi), statusCode: Int) -> Endpoint<RestApi> {
            let url = target.baseURL.appendingPathComponent(target.path).absoluteString
            return Endpoint(url: url, sampleResponseClosure: {.networkResponse(statusCode, target.sampleData)}, method: target.method, parameters: target.parameters, parameterEncoding: target.parameterEncoding)
        }
    }
    

    Write in your test case with endpoint closures as shown below

    func testSignUpURLRequestForStubbedData() {

        let endpointClosure = { (target: RestApi) -> Endpoint<RestApi> in
            self.customStatusCodeEndPoint(target, statusCode: 201)
        }
        stubProvider = RxMoyaProvider<RestApi>(endpointClosure: endpointClosure, stubClosure: RxMoyaProvider.immediatelyStub)
        let userData = Creator()!
        userData.username = "raj@naresh.com"
        userData.password = "password"
        userData.displayName = "Surya"
        let target: RestApi = .signUp(userData)
        stubProvider.request(target) { result in
            if case .success(let response) = result {
                log.debug(response.statusCode)
                XCTAssertEqual("201", String(response.statusCode))
    
            }
        }
    }