XCUITest与PACT没有返回模拟网络响应

XCUITest与PACT没有返回模拟网络响应

问题描述:

我试图用PACT Consumer Swift运行一个XCUITest不管我如何努力进行配置,真正的网络请求,而不是接收与200个状态码和X-嘲笑响应验证令牌。我错过了什么?XCUITest与PACT没有返回模拟网络响应

这里是UI测试用例:

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... 
} 

实例化MockServer类在后台启动一个模拟服务器。它正在运行的URL将在MockServer实例上提供。在你的例子中,这将是API.baseUrl

你需要配置被测试的应用程序与这个URL交谈(即你想要URLService.getBaseUrl()返回模拟服务器的URL)。也许你可以通过启动参数或环境传递url,例如app.launchArguments = ["FeatureTest", API.baseUrl]

+0

谢谢。这确实有帮助。我们有一个xcconfig文件,该文件已经具有模拟服务器运行的baseUrl并且UrlService用于获取其基本URL。现在我的挑战是让配置条件变量赋值工作: - / – Adam