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