2014-10-06 1 views
8

Я хочу запустить тест, ожидающий ответа браузера.Использование схемы URL-адресов в XCTestCase

В тестовой цели есть Info.plist, где я могу зарегистрировать собственные схемы URL. Но они никогда не называются. Я знаю, что тестовая цель не является реальным приложением.

Есть ли способ?

EDIT (for bounty): Я хочу написать интеграционный тест для класса, который вызывает openUrl("tel://" + some phone number). Как подписаться на эту схему URL в XCTestCase?

+0

Можете ли вы достичь того, что вам нужно с NSURLProtocol? –

+0

Не могли бы вы перефразировать то, что вы подразумеваете под подпиской на схему URL? Вы имеете в виду, как вы определяете, какое приложение назначено для обработки конкретной схемы? Или вы имеете в виду, как вы проверяете, действительно ли openURL выполняет действие? –

+0

Мое приложение зарегистрировано в схеме URL, подобной этой: myapp: //. Я хочу проверить, могу ли я открыть http://mywebsite.com в браузере, который будет перенаправлен на myapp: // в конце концов. – McZonk

ответ

-1

Я не уверен, что именно вы пытаетесь протестировать. Я предполагаю, что это нечто большее, чем открыть или нет URL. В приведенном ниже тестовом примере проверяется, будет ли FaceTime открываться и может открыть URL-адрес. Если приложение, которое вы тестируете, регистрирует пользовательскую схему, необходимо просто изменить pathToTestApplication. не

enter image description here

class NSURL_SchemeTests: XCTestCase { 

    func testWhoHandlesSchemeTel() { 
     let testAppURL = NSURL(string: pathToTestApplication) 

     // create a NSURL for the test 
     let tel = "tel:5555555555" 
     let url = NSURL(string: tel) 
     XCTAssert(url != nil, "Could not create a URL from \(tel)") 

     // determine whether any application is registered to handle the URL 
     let workspace = NSWorkspace.sharedWorkspace() 
     let urlHandler = workspace.URLForApplicationToOpenURL(url!) 
     XCTAssert(urlHandler != nil, "No application found to open URL \(tel)") 

     // determine whether the expected test application is registered to handle the URL 
     XCTAssert(urlHandler! == testAppURL, 
      "Application \(pathToTestApplication) was not registered to handle URL \(tel)") 

     // attempt to open the URL 
     XCTAssert(workspace.openURL(url!), "Could not open URL \(tel)") 
    } 
} 
+0

Я хочу проверить, успешно ли зарегистрировано мое приложение в схеме URL, и если он получает обратный вызов при открытии myapp: //. – McZonk

+0

Тестирование, которое этот XCT-код является частью, действительно проверяет, зарегистрировано ли ваше приложение для обработки схемы.Последний тест также определит, успешно ли он был связан с приложением. Однако, если вы хотите узнать, какое приложение действительно получено от тестового приложения, вам нужно будет самому обработать приложение. –

1

Вопрос был retagged для OS X, так что мой ответ уже не действует

Оригинальный ответ

Это невозможно. Основная причина в том, что тесты связаны с одним запущенным экземпляром приложения, они не имеют контроля над устройством, они работают как часть приложения. Вероятно, вы можете открыть URL-адрес, но вы не сможете вернуться в приложение и выполнить утверждение.

Также обратите внимание, что XCUnit является блоком тестирования . Вы не сможете написать в нее расширенный интеграционный тест. Вы, возможно, добились большего успеха в UI Automation, но этот конкретный тестовый пример будет очень сложным даже для него. Например, чтобы открыть ссылку вашим приложением в симуляторе, вы можете создать страницу HTML, которая будет перенаправляться на ссылку, а затем использовать оболочку для выполнения open testLink.html -a "iOS Simulator". Однако, по моему скромному мнению, подобные тесты ненадежны и очень трудно писать и отлаживать.

Мой совет будет:

  1. Написать тест модуля, который издевается [UIApplication openURL:] и убедитесь, что вы передаете правильный URL к нему. Или, если вы хотите другое направление, напишите единичный тест, который вызовет методы UIApplicationDelegate в вызываемом порядке, имитируя открытие ссылки вашим приложением. Это как можно дальше с XCUnit.
  2. Проверьте остальные вручную.
+0

Мой вопрос касается OS X. Я никогда не спрашивал об iOS. Но я думаю, вы правы. Невозможно зарегистрировать тест по схеме URL. – McZonk

+0

@McZonk Вы отметили 'cocoa-touch'. – Sulthan

+0

Нет Лояльного Тингли. Однако я думаю, что проблема будет существовать для обеих платформ. – McZonk