2017-02-28 7 views
1

PACT Consumer Swift을 사용하여 XCUITest를 실행하려고하는데 아무리 설정을 시도해도 200 개의 상태 코드와 X- 인증 토큰. 내가 뭘 놓치고 있니? 여기모의 네트워크 응답을 반환하지 않는 XCUITest

import XCTest 
import PactConsumerSwift 
import Nimble 

class MyFeature: XCTestCase { 

    override func setUp() { 
     super.setUp()  
     let app = XCUIApplication() 
     app.launchArguments = ["FeatureTest"] 
     app.launch() 
     Nimble.AsyncDefaults.Timeout = 60 
    } 

    override func tearDown() { 
     super.tearDown() 
    } 

    func testSuccessfulSignIn() { 
     let API = MockService(
      provider: "Sign In API", 
      consumer: "Sign In Consumer") 

     API 
      .given("user signs in with valid credentials") 
      .uponReceiving("valid credentials") 
      .withRequest(method: .POST, 
       path: "/login", 
       body: [ 
        "username": "john", 
        "password": "1234" 
       ]) 
      .willRespondWith(
       status: 200, 
       headers: [ 
        "X-Auth-Token":"Super-Cool-Token" 
       ]) 

     API.run { (testComplete) in 
      let app = XCUIApplication() 

      let usernameField = app.textFields["UsernameField"] 
      usernameField.tap() 
      usernameField.tap() 
      usernameField.typeText("john") 

      let passwordField = app.secureTextFields["PasswordField"] 
      passwordField.tap() 
      passwordField.typeText("1234") 

      app.buttons["LOGIN"].tap() 

      expect(app.staticTexts["Welcome!"].exists).to(beTrue()) 

      testComplete() 
     } 
    } 

} 

실제 로그인 논리입니다 :

func attemptLogin(_ user:String? = nil, password:String? = nil) -> Promise<LoginResponse> { 
    if let 
     baseUrl = URLService.getBaseUrl(), 
     let url = URL(string: baseUrl + "login") 
    { 
     var request = URLRequest(url: url) 
     request.httpMethod = "POST" 
     request.addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 

     if 
      let username = encode(string: user), 
      let password = encode(string: password) 
     { 
      request.httpBody = "username=\(username)&password=\(password)".data(using: String.Encoding.utf8) 
     } 
    } 

    // Sends request and does other stuff... 
} 

답변

0

MockServer 클래스를 인스턴스화 백그라운드에서 모의 ​​서버를 시작 여기

은 UI 테스트 케이스이다. 실행중인 URL은 MockServer 인스턴스에서 사용할 수 있습니다. 귀하의 예에서 이것은 API.baseUrl

이 URL과 통신하도록 구성해야합니다 (즉, URLService.getBaseUrl()이 모의 서버의 URL을 반환하도록하려는 경우). 어쩌면 당신은 url을 via launch 인수 나 환경에 전달할 수 있습니다. app.launchArguments = ["FeatureTest", API.baseUrl]

+0

감사합니다. 그것은 도움이되었습니다. 모크 서버가 실행되는 baseUrl이 이미있는 xcconfig 파일이 있고 UrlService가 기본 URL을 가져 오는 데 사용합니다. 이제 나의 도전 과제는 단지 조건 변수 할당이 작동하도록 설정하는 것입니다 : - / – Adam