Ответ 1
Да, похоже, что все переменные среды и аргументы запуска, представленные в схемах, игнорируются в тестах XCTest.
Однако вы можете установить язык программно в тесте, например, в методе setUp()
:
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
let app = XCUIApplication()
app.launchArguments += ["-AppleLanguages", "(en-US)"]
app.launchArguments += ["-AppleLocale", "\"en-US\""]
app.launch()
}
Теперь вы можете расширить этот подход и сделать что-то вроде Snapshot
:
2 вещь должна быть передана из моментального снимка в команду xcodebuild инструмент:
Тип устройства передается через параметр назначения параметр xcodebuild
Язык передается через временный файл, который записывается моментальным снимком перед запуском тестов и считывается пользовательским интерфейсом Тесты при запуске приложения
В конце концов, чтобы изменить язык на базах схем, вы можете сделать следующее:
1. Напишите предварительное действие script для теста, которое создает временный файл:
mkdir -p ~/Library/Caches/xcode-helper
echo "en-US" > ~/Library/Caches/xcode-helper/language.txt
2. Загрузите файл в setUp()
и установите язык приложения:
override func setUp() {
super.setUp()
let app = XCUIApplication()
let path = NSProcessInfo().environment["SIMULATOR_HOST_HOME"]! as NSString
let filepath = path.stringByAppendingPathComponent("Library/Caches/xcode-helper/language.txt")
let trimCharacterSet = NSCharacterSet.whitespaceAndNewlineCharacterSet()
let language = try! NSString(contentsOfFile: filepath, encoding: NSUTF8StringEncoding).stringByTrimmingCharactersInSet(trimCharacterSet) as String
app.launchArguments += ["-AppleLanguages", "(\(language))"]
app.launchArguments += ["-AppleLocale", "\"\(language)\""]
app.launch()
}
С этого момента Xcode будет запускать тест с языком/языком, указанным в схеме pre-action script.
UPDATE
Выключается, тесты не игнорируют аргументы, приведенные в схеме. Аргументы фактически передаются самому тесту, но не тестируемому. Что может быть неожиданным, но это имеет смысл.
Это, как говорится, все, что вам нужно сделать:
1. Задайте аргументы запуска -AppleLanguages (en-US)
и -AppleLocale en_US
для теста в схеме
2. Передайте аргументы запуска в тесте экземпляру XCUIApplication
перед вызовом метода launch()
override func setUp() {
super.setUp()
// Put setup code here. This method is called before the invocation of each test method in the class.
let app = XCUIApplication()
app.launchArguments += NSProcessInfo().arguments
app.launch()
}