Да, похоже, что все переменные окружения и аргументы запуска, представленные в схемах, в тестах 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. Напишите сценарий предварительного действия для теста, который создает временный файл:
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 будет запускать тест с языком/локалью, указанными в сценарии предварительного действия схемы.
ОБНОВИТЬ
Оказывается, тесты не игнорируют аргументы, представленные в схеме. Аргументы фактически передаются самому тесту, но не тестируемому приложению. Что может быть неожиданно, но имеет смысл.
При этом все, что вам нужно сделать, это:
1. Задайте -AppleLanguages (en-US)
и -AppleLocale en_US
аргументы запуска теста в схеме
![Снимок экрана — установка ‹ code›-AppleLanguages (en)‹/code› и ‹code›-AppleLocale en_US‹/code› запускают аргументы для теста в схеме](https://i.stack.imgur.com/D4Bl6.png)
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()
}
person
Tom Kraina
schedule
22.04.2016