Моя заглушка в тестах BDD

Я хочу сделать запрос-заглушку Moya в моем Быстрые / шустрые тесты BDD. Мойя имеет параметр sampleData, который я создал с помощью файла JSON:

var sampleData: Data {
    switch self {
    case .getPlaces:
        // Provided that project have a file named get_places.json in it's bundle.
        guard let path = Bundle.main.path(forResource: "get_places", ofType: "json"),
            let data = Data(base64Encoded: path) else {
                return Data()
        }
        return data
    case .getPlaceDetail:
        // Provided that project have a file named get_place_detail.json in it's bundle.
        guard let path = Bundle.main.path(forResource: "get_place_detail", ofType: "json"),
            let data = Data(base64Encoded: path) else {
                return Data()
        }
        return data
    }
}

Как я могу использовать этот параметр в тестах? Есть ли идеи сделать запрос-заглушку Moya в тестах?

Спасибо!


person Svyatoslav    schedule 02.02.2017    source источник


Ответы (2)


Просто используйте своего провайдера, как в своем реальном коде. Moya обнаруживает, что текущая цель является тестовой, и возвращает образец данных вместо выполнения запроса.

person Javier Cancio    schedule 03.02.2017
comment
Я пытаюсь написать тест, который проверяет ответ на запрос getPlaces, но следующие оба теста являются успешными для этого ответа: testProvider.request(.getPlaces(location: "")) { places in expect(places).to(beNil()) } и testProvider.request(.getPlaces(location: "")) { places in expect(places).toNot(beNil()) }. Почему так происходит? Что я делаю не так? - person Svyatoslav; 03.02.2017
comment
Вы создали своего поставщика тестов с помощью stubClosure? Как это let provider = RxMoyaProvider<YourTargetType>(stubClosure: MoyaProvider.immediatelyStub) - person Javier Cancio; 04.02.2017

Если вам все еще интересно использовать образцы данных для разработки (если бэкэнд еще не готов), вы можете создать поставщика Moya, передавая endpoint закрытие, как показано ниже:

let endpoint = { (target: NetworkApiService) -> Endpoint in
            return Endpoint(url: URL(target: target).absoluteString,
                            sampleResponseClosure: { .networkResponse(200, target.sampleData) },
                            method: target.method,
                            task: target.task,
                            httpHeaderFields: target.headers)
        }
let provider = MoyaProvider<NetworkApiService>(endpointClosure: endpoint, stubClosure: MoyaProvider.immediatelyStub)

Он вернет данные, указанные в public var sampleData: Data протокола TargetType.

person Stanislau Baranouski    schedule 12.11.2018