【问题标题】:How to unit test TwilioChatClient on iOS with Swift and CocoaPods如何使用 Swift 和 CocoaPods 在 iOS 上对 TwilioChatClient 进行单元测试
【发布时间】:2017-12-18 12:38:26
【问题描述】:

由于 Twilio 可编程聊天 SDK 相当复杂,我有时会遇到难以在应用程序中复制的场景,因此我决定进行一些单元测试。 问题是,我无法初始化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) {
        // ...
    }
}

【问题讨论】:

  • 这里是 Twilio 开发人员传道者。我对 iOS 中的测试不太了解,但我在内部询问过是否有其他人可以提供帮助。您是否在此测试中从外部服务中检索令牌?总的来说,这对我来说似乎很不稳定。此外,在测试中实例化一个完整的TwilioChatClient 也会建立到 Twilio 服务的各种连接。您可以考虑模拟 Twilio 服务本身吗?
  • 嗨@philnash 感谢您的回复。检索令牌对我来说工作正常。这似乎与项目设置、路径或类似内容有些复杂。我知道在测试中模拟这样的服务是一个好主意和常用方法,但我不是要测试我的应用程序,而是 Twilio 本身。我已经在 iOS 的可编程聊天 SDK 中发现了 3 个错误(它们已经在 GitHub 问题或您的支持票中),所以我只是想拥有一个能够轻松测试/复制一些复杂场景的环境(创建频道,邀请、接受、离开、删除等...)。
  • 那我怕是没办法了,我只是对iOS中的测试还不够了解。感谢您帮助测试 SDK,我希望您发现的错误能够迅速为您修复。
  • 这可能会有所帮助:github.com/twilio/twilio-chat-ios/issues/9

标签: ios twilio twilio-programmable-chat


【解决方案1】:

看起来 TwilioChatClient 可能是通过被测目标引入的,而不是直接通过测试引入的。这可能会导致我们无法找到包含在您所看到的消息的框架中的资源。

要解决此问题,请确保将 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找到一个工作示例项目。

我们将努力在未来的版本中使这一过程更加顺畅,如果以上解决了您遇到的单元测试问题,或者我们是否可以提供进一步帮助,请告诉我们。

【讨论】:

  • 这在测试目标正在测试使用 TwilioChatClient 的应用程序目标中的代码的正常情况下不起作用。请参阅github.com/twilio/twilio-chat-ios/issues/9。我希望可以解决这个问题,因为能够测试我们的代码很重要。
猜你喜欢
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 2021-03-01
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
相关资源
最近更新 更多