2017-12-18 134 views
0

由於Twilio Programmable Chat SDK非常複雜,我有時會遇到在應用程序中難以複製的場景,所以我決定做一些單元測試。 問題是,我無法初始化TwilioChatClient。你有什麼想法我做錯了嗎?如何使用Swift和CocoaPods在iOS上對TwilioChatClient進行單元測試

的Xcode調試控制檯

Test Case '-[ONNTests.ONNTests testTwoClientCreation]' started. 
    0x7000065c6000 | 12/18/13:26:18.979 | FATAL | Chat-iOS | Error instantiating client framework path. 
    0x7000065c6000 | 12/18/13:26:18.980 | DEBUG | Chat-iOS | releasing chat client instance: <TwilioChatClient: 0x7fcf01552c20> 

Podfile

target 'MyTests' do 
    pod 'TwilioChatClient', '~> 2.1.0' 
end 

代碼

import XCTest 
import TwilioChatClient 

class MyTests: XCTestCase { 
    var client1: TwilioChatClient? 

    let e1 = XCTestExpectation(description: "Download Twilio token 1") 
    let e2 = XCTestExpectation(description: "Create client 1 successfully") 

    func testTwilioClientCreation() { 
     TwilioChatClient.setLogLevel(.debug) 

     getToken { [unowned self] token in 
      self.e1.fulfill() 
      TwilioChatClient.chatClient(withToken: token, properties: nil, delegate: self) { [unowned self] (result, client) in 
       if result.isSuccessful() { 
        self.client1 = client 
        self.e11.fulfill() 
       } 
      } 
     } 

     wait(for: [e1, e2], timeout: 20.0) 
    } 

    func getToken(completion: @escaping (_ token: String) -> Void) { 
     // ... 
    } 
} 
+0

Twilio開發人員在這裏傳播。我對iOS的測試並不知情,但我已經在內部詢問是否有其他人可以提供幫助。您是否在此測試中從外部服務中檢索令牌?一般來說,這對我來說似乎很脆弱。另外,在一個測試中實例化一個完整的'TwilioChatClient'也將建立與Twilio服務的各種連接。你可以看看嘲諷Twilio服務本身嗎? – philnash

+0

嗨@philnash感謝您的回覆。檢索令牌對我來說工作得很好。這似乎與項目設置,路徑或類似的東西有些複雜。我知道在測試中模擬這樣的服務是一個好主意和常見方法,但我不想測試我的應用程序,但是Twilio本身。我已經在iOS的Programmable Chat SDK中發現了3個錯誤(它們已經在GitHub問題上或在您的支持服務單上),所以我只是想要一個能夠輕鬆測試/複製一些複雜場景的環境(創建頻道,邀請,接受,離開,刪除等)。 –

+0

然後我不禁害怕,我對iOS的測試不夠了解。感謝您幫助測試SDK,我希望您發現的錯誤能夠迅速爲您解決。 – philnash

回答

0

它看起來像Twilio ChatClient可以通過被測目標引入,而不是直接進入測試。這可能會導致我們查找框架中包含的資源的問題,這是您看到的消息。

要解決此問題,請確保TwilioChatClient框架直接聲明爲一個依賴於你的測試目標,例如:

target 'TestingSample' do 
    pod 'TwilioChatClient', '~> 2.1.0' 

    target 'TestingSampleTests' do 

    end 
end 

另外請注意,它是關機,當你用做客戶端重要它可以在您的測試方法結束時或者在共享拆除方法中使用。

wait(for: [e1, e2], timeout: 20.0) 

self.client1?.shutdown() 
self.client1 = nil 

一個工作示例項目可以找到here

我們將在未來的版本中使這一過程更加流暢,請讓我們知道如果上述問題解決了您所看到的單元測試問題,或者我們可以進一步提供幫助。

相關問題