SVG не поддерживаются в React Native в этой точке. Есть несколько библиотек, в которых они играли с идеей, но я не знаю, что любой из них «готов к производству»
Есть относительно новый проект под названием uispec , который был вдохновлен тестированием DSL RSpec. Пример спецификации выглядит так:
#import "DescribeEmployeeAdmin.h"
#import "SpecHelper.h"
@implementation DescribeEmployeeAdmin
-(void)before {
//login as default admin before each example
[SpecHelper loginAsAdmin];
}
-(void)after {
//logout after each example
[SpecHelper logout];
}
-(void)itShouldHaveDefaultUsers {
//Check that all default users are in list
[[app.tableView.label text:@"Larry Stooge"] should].exist;
[[app.tableView.label text:@"Curly Stooge"] should].exist;
[[app.tableView.label text:@"Moe Stooge"] should].exist;
}
-(void)itShouldAddAUser {
//Click the + button
[app.navigationButton touch];
//Set the form fields.
//Also ".with" is optional so we here we can show the different syntax
[[app.textField.with placeholder:@"First Name"] setText:@"Brian"];
[[app.textField.with placeholder:@"Last Name"] setText:@"Knorr"];
[[app.textField.with placeholder:@"Email"] setText:@"b@g.com"];
[[app.textField placeholder:@"Username"] setText:@"bkuser"];
[[app.textField placeholder:@"Password"] setText:@"test"];
[[app.textField placeholder:@"Confirm"] setText:@"test"];
//Click the Save button
[[app.navigationButton.label text:@"Save"] touch];
//Make sure the error alert view doesn't appear
[app timeout:1].alertView.should.not.exist;
//User list should now have a new entry
[[app.tableView.label text:@"Brian Knorr"] should].exist;
}
@end
Имейте в виду, что я никогда не использовал его, поэтому есть шанс, что он не будет точно соответствовать вашим потребностям. Но, по крайней мере, вы сможете использовать кодовую базу в качестве вдохновения для написания собственной тестовой среды.
Вы можете взглянуть на BDD От идеи до приложения , где вы увидите пример использования калебаса.
Ничто не мешает вам указать в качестве префикса для вашего метода тестирования слово Should. Я сделал это с помощью NUnit на C #.
JSLint - это один из способов очистки наш код в нашем приложении. Это помогает во время проверки кода и принятия решения о том, хорошо написана сторонняя библиотека или нет. Мы также используем проверки IntelliJ IDEA, которые по большей части предупреждают о тех же проблемах. Мы также используем jQuery, который помог очистить большой объем кода.
Это помогает во время проверки кода и принятия решения о том, хорошо написана сторонняя библиотека или нет. Мы также используем проверки IntelliJ IDEA, которые по большей части предупреждают о тех же проблемах. Мы также используем jQuery, который помог очистить большой объем кода. Это помогает во время проверки кода и принятия решения о том, хорошо написана сторонняя библиотека или нет. Мы также используем проверки IntelliJ IDEA, которые по большей части предупреждают о тех же проблемах. Мы также используем jQuery, который помог очистить большой объем кода. Я обнаружу, что Model View Controller (MVC) часто реализуется с некоторой связью между представлением и некоторой моделью какого-либо типа - таким образом, данное представление специально предназначено для обеспечения визуализации данного объекта (модели).Шаблон презентационного представления модели вы обычно обнаруживаете, что презентатор заботится о работе с моделью и решает, какая информация из нее будет необходима для формирования какой-либо визуализации.
На этой диаграмме стрелки представляют зависимости:
Обычно вы слышите, что обсуждение этого шаблона возникает при обсуждении инфраструктуры ASP.NET MVC, и сталкиваетесь с информацией о шаблоне MVP и его реализации в ASP.NET WebForms. По моему опыту, часто считается, что WebForms сам по себе является структурой с шаблоном MVP - это неправда. я плохо знаком с препроцессором C ...
Вам, вероятно, также придется использовать #define
, чтобы ваши макросы передавали правильные значения для __ FILE __
и __ LINE __
, когда тесты BDD не проходят. Например, вам, возможно, придется сделать что-то вроде этого:
@interface NSObject (BehaviorDrivenDevelopment)
- (void)shouldBeValidInFile:(const char *)file line:(int)line;
@end
#define shouldBeValid shouldBeValidInFile:__FILE__ line:__LINE__
Таким образом, вы могли бы вызвать его так:
[[someObject methodUnderTest:argument] shouldBeValid];
Код, который видит компилятор, будет следующим:
[[someObject methodUnderTest:argument] shouldBeValidInFile:__FILE__ line:__LINE__];
__ FILE __
и ] __ LINE __
макросы препроцессора будут расширены до текущего файла и строки в вашем исходном тестовом файле.
Таким образом, когда у вас есть неудачный тест, он может передать соответствующую информацию в SenTestingKit для отправки обратно в Xcode. Ошибка будет правильно отображаться в окне результатов сборки, и щелкнув по ней, вы перейдете к точному месту ошибки в ваших тестах.
. Вероятно, вам также придется использовать #define
, чтобы ваши макросы передавали правильные значения для __ FILE __
и __ LINE __
при тестировании BDD. потерпеть неудачу. Например, вам, возможно, придется сделать что-то вроде этого:
@interface NSObject (BehaviorDrivenDevelopment)
- (void)shouldBeValidInFile:(const char *)file line:(int)line;
@end
#define shouldBeValid shouldBeValidInFile:__FILE__ line:__LINE__
Таким образом, вы бы вызывали его так:
[[someObject methodUnderTest:argument] shouldBeValid];
Код, который видит компилятор, будет следующим:
[[someObject methodUnderTest:argument] shouldBeValidInFile:__FILE__ line:__LINE__];
__ FILE __
и ] __ LINE __
макросы препроцессора будут расширены до текущего файла и строки в вашем исходном тестовом файле.
Таким образом, когда у вас есть неудачный тест, он может передать соответствующую информацию в SenTestingKit для отправки обратно в Xcode. Ошибка будет правильно отображаться в окне результатов сборки, и щелкнув по ней, вы перейдете к точному месту ошибки в ваших тестах.
. Вероятно, вам также придется использовать #define
, чтобы ваши макросы передавали правильные значения для __ FILE __
и __ LINE __
при тестировании BDD. потерпеть неудачу. Например, вам, возможно, придется сделать что-то вроде этого:
@interface NSObject (BehaviorDrivenDevelopment)
- (void)shouldBeValidInFile:(const char *)file line:(int)line;
@end
#define shouldBeValid shouldBeValidInFile:__FILE__ line:__LINE__
Таким образом, вы могли бы вызвать его так:
[[someObject methodUnderTest:argument] shouldBeValid];
Код, который видит компилятор, будет следующим:
[[someObject methodUnderTest:argument] shouldBeValidInFile:__FILE__ line:__LINE__];
__ FILE __
и ] __ LINE __
макросы препроцессора будут расширены до текущего файла и строки в вашем исходном тестовом файле.
Таким образом, когда у вас есть неудачный тест, он может передать соответствующую информацию в SenTestingKit для отправки обратно в Xcode. Ошибка будет правильно отображаться в окне результатов сборки, и щелкнув ее, вы перейдете к точному месту сбоя в ваших тестах.
Возможно, вам также придется использовать #define
, чтобы ваши макросы передавали правильные значения для __ FILE __
и __ LINE __
, когда ваши тесты BDD терпят неудачу. Например, вам, возможно, придется сделать что-то вроде этого:
@interface NSObject (BehaviorDrivenDevelopment)
- (void)shouldBeValidInFile:(const char *)file line:(int)line;
@end
#define shouldBeValid shouldBeValidInFile:__FILE__ line:__LINE__
Таким образом, вы бы вызывали его так:
[[someObject methodUnderTest:argument] shouldBeValid];
Код, который видит компилятор, будет следующим:
[[someObject methodUnderTest:argument] shouldBeValidInFile:__FILE__ line:__LINE__];
__ FILE __
и ] __ LINE __
макросы препроцессора будут расширены до текущего файла и строки в вашем исходном тестовом файле.
Таким образом, когда у вас есть неудачный тест, он может передать соответствующую информацию в SenTestingKit для отправки обратно в Xcode. Ошибка будет правильно отображаться в окне результатов сборки, и щелкнув ее, вы перейдете к точному месту сбоя в ваших тестах.
Возможно, вам также придется использовать #define
, чтобы ваши макросы передавали правильные значения для __ FILE __
и __ LINE __
, когда ваши тесты BDD терпят неудачу. Например, вам, возможно, придется сделать что-то вроде этого:
@interface NSObject (BehaviorDrivenDevelopment)
- (void)shouldBeValidInFile:(const char *)file line:(int)line;
@end
#define shouldBeValid shouldBeValidInFile:__FILE__ line:__LINE__
Таким образом, вы могли бы вызвать его так:
[[someObject methodUnderTest:argument] shouldBeValid];
Код, который видит компилятор, будет следующим:
[[someObject methodUnderTest:argument] shouldBeValidInFile:__FILE__ line:__LINE__];
__ FILE __
и ] __ LINE __
макросы препроцессора будут расширены до текущего файла и строки в вашем исходном тестовом файле.
Таким образом, когда у вас есть неудачный тест, он может передать соответствующую информацию в SenTestingKit для отправки обратно в Xcode. Ошибка будет правильно отображаться в окне результатов сборки, и щелкнув ее, вы перейдете к точному месту сбоя в ваших тестах.
[[someObject methodUnderTest:argument] shouldBeValid];
Код, который видит компилятор, будет следующим:
[[someObject methodUnderTest:argument] shouldBeValidInFile:__FILE__ line:__LINE__];
Макросы препроцессора __ FILE __
и __ LINE __
будут расширены до текущего файла и строки в вашем тестовом исходном файле.
Таким образом, если у вас действительно есть неудачный тест, он может передать соответствующую информацию в SenTestingKit для отправки обратно в Xcode. Ошибка будет правильно отображаться в окне результатов сборки, и щелкнув ее, вы перейдете к точному месту сбоя в ваших тестах.
[[someObject methodUnderTest:argument] shouldBeValid];
Код, который видит компилятор, будет следующим:
[[someObject methodUnderTest:argument] shouldBeValidInFile:__FILE__ line:__LINE__];
Макросы препроцессора __ FILE __
и __ LINE __
будут расширены до текущего файла и строки в вашем тестовом исходном файле.
Таким образом, если у вас действительно есть неудачный тест, он может передать соответствующую информацию в SenTestingKit для отправки обратно в Xcode. Ошибка будет правильно отображаться в окне результатов сборки, и щелкнув ее, вы перейдете к точному месту сбоя в ваших тестах.
Адам Миллиган из Pivotal Labs создал структуру BDD для Objective-C под названием Cedar , которая нацелена как на Cocoa, так и на Cocoa Touch. Он использует блоки аналогично RSpec. Вот пример спецификации:
SPEC_BEGIN(FooSpecs)
sharedExamplesFor(@"a similarly-behaving thing", ^(NSDictionary *context) {
it(@"should do something common", ^{
...
});
});
NSDictionary *context = [NSDictionary dictionary];
describe(@"Something that shares behavior", ^{
itShouldBehaveLike(@"a similarly-behaving thing", context);
});
describe(@"Something else that shares behavior", ^{
itShouldBehaveLike(@"a similarly-behaving thing", context);
});
SPEC_END