Custom logic blocks for RCTTestRunner's runTest: method
Reviewed By: majak Differential Revision: D2626497 fb-gh-sync-id: c78e3b47be4ee192e899594bd05b13521af7172e
This commit is contained in:
parent
760a2fc79a
commit
3a42661b47
|
@ -12,7 +12,6 @@
|
|||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import <XCTest/XCTest.h>
|
||||
#import "RCTSparseArray.h"
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
[_runner runTest:_cmd
|
||||
module:@"IntegrationTestHarnessTest"
|
||||
initialProps:@{@"waitOneFrame": @YES}
|
||||
expectErrorBlock:nil];
|
||||
configurationBlock:nil];
|
||||
}
|
||||
|
||||
- (void)testTheTester_ExpectError
|
||||
|
@ -55,6 +55,7 @@
|
|||
[_runner runTest:_cmd
|
||||
module:@"IntegrationTestHarnessTest"
|
||||
initialProps:@{@"shouldThrow": @YES}
|
||||
configurationBlock:nil
|
||||
expectErrorRegex:@"because shouldThrow"];
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
|
||||
@protocol RCTBridgeModule;
|
||||
|
||||
@class RCTRootView;
|
||||
|
||||
@interface RCTTestRunner : NSObject
|
||||
|
||||
@property (nonatomic, assign) BOOL recordMode;
|
||||
|
@ -59,26 +61,42 @@
|
|||
|
||||
/**
|
||||
* Same as runTest:, but allows for passing initialProps for providing mock data
|
||||
* or requesting different behaviors, and expectErrorRegex verifies that the
|
||||
* error you expected was thrown.
|
||||
* or requesting different behaviors, configurationBlock provides arbitrary logic for the hosting
|
||||
* root view manipulation.
|
||||
*
|
||||
* @param test Selector of the test, usually just `_cmd`.
|
||||
* @param moduleName Name of the JS component as registered by `AppRegistry.registerComponent` in JS.
|
||||
* @param initialProps props that are passed into the component when rendered.
|
||||
* @param expectErrorRegex A regex that must match the error thrown. If no error is thrown, the test fails.
|
||||
* @param configurationBlock A block that takes the hosting root view and performs arbitrary manipulation after its creation.
|
||||
*/
|
||||
- (void)runTest:(SEL)test module:(NSString *)moduleName initialProps:(NSDictionary *)initialProps expectErrorRegex:(NSString *)expectErrorRegex;
|
||||
|
||||
- (void)runTest:(SEL)test module:(NSString *)moduleName initialProps:(NSDictionary *)initialProps configurationBlock:(void(^)(RCTRootView *rootView))configurationBlock;
|
||||
|
||||
/**
|
||||
* Same as runTest:, but allows for passing initialProps for providing mock data
|
||||
* or requesting different behaviors, and expectErrorBlock provides arbitrary
|
||||
* or requesting different behaviors, configurationBlock provides arbitrary logic for the hosting
|
||||
* root view manipulation, and expectErrorRegex verifies that the error you expected was thrown.
|
||||
*
|
||||
* @param test Selector of the test, usually just `_cmd`.
|
||||
* @param moduleName Name of the JS component as registered by `AppRegistry.registerComponent` in JS.
|
||||
* @param initialProps props that are passed into the component when rendered.
|
||||
* @param configurationBlock A block that takes the hosting root view and performs arbitrary manipulation after its creation.
|
||||
* @param expectErrorRegex A regex that must match the error thrown. If no error is thrown, the test fails.
|
||||
*/
|
||||
- (void)runTest:(SEL)test module:(NSString *)moduleName initialProps:(NSDictionary *)initialProps configurationBlock:(void(^)(RCTRootView *rootView))configurationBlock expectErrorRegex:(NSString *)expectErrorRegex;
|
||||
|
||||
/**
|
||||
* Same as runTest:, but allows for passing initialProps for providing mock data
|
||||
* or requesting different behaviors, configurationBlock provides arbitrary logic for the hosting
|
||||
* root view manipulation, and expectErrorBlock provides arbitrary
|
||||
* logic for processing errors (nil will cause any error to fail the test).
|
||||
*
|
||||
* @param test Selector of the test, usually just `_cmd`.
|
||||
* @param moduleName Name of the JS component as registered by `AppRegistry.registerComponent` in JS.
|
||||
* @param initialProps props that are passed into the component when rendered.
|
||||
* @param configurationBlock A block that takes the hosting root view and performs arbitrary manipulation after its creation.
|
||||
* @param expectErrorBlock A block that takes the error message and returns NO to fail the test.
|
||||
*/
|
||||
- (void)runTest:(SEL)test module:(NSString *)moduleName initialProps:(NSDictionary *)initialProps expectErrorBlock:(BOOL(^)(NSString *error))expectErrorBlock;
|
||||
- (void)runTest:(SEL)test module:(NSString *)moduleName initialProps:(NSDictionary *)initialProps configurationBlock:(void(^)(RCTRootView *rootView))configurationBlock expectErrorBlock:(BOOL(^)(NSString *error))expectErrorBlock;
|
||||
|
||||
@end
|
||||
|
|
|
@ -68,19 +68,24 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init)
|
|||
|
||||
- (void)runTest:(SEL)test module:(NSString *)moduleName
|
||||
{
|
||||
[self runTest:test module:moduleName initialProps:nil expectErrorBlock:nil];
|
||||
[self runTest:test module:moduleName initialProps:nil configurationBlock:nil expectErrorBlock:nil];
|
||||
}
|
||||
|
||||
- (void)runTest:(SEL)test module:(NSString *)moduleName
|
||||
initialProps:(NSDictionary *)initialProps expectErrorRegex:(NSString *)errorRegex
|
||||
- (void)runTest:(SEL)test module:(NSString *)moduleName initialProps:(NSDictionary *)initialProps configurationBlock:(void(^)(RCTRootView *rootView))configurationBlock
|
||||
{
|
||||
[self runTest:test module:moduleName initialProps:initialProps expectErrorBlock:^BOOL(NSString *error){
|
||||
return [error rangeOfString:errorRegex options:NSRegularExpressionSearch].location != NSNotFound;
|
||||
}];
|
||||
[self runTest:test module:moduleName initialProps:initialProps configurationBlock:configurationBlock expectErrorBlock:nil];
|
||||
}
|
||||
|
||||
- (void)runTest:(SEL)test module:(NSString *)moduleName
|
||||
initialProps:(NSDictionary *)initialProps expectErrorBlock:(BOOL(^)(NSString *error))expectErrorBlock
|
||||
- (void)runTest:(SEL)test module:(NSString *)moduleName initialProps:(NSDictionary *)initialProps configurationBlock:(void(^)(RCTRootView *rootView))configurationBlock expectErrorRegex:(NSString *)errorRegex
|
||||
{
|
||||
BOOL(^expectErrorBlock)(NSString *error) = ^BOOL(NSString *error){
|
||||
return [error rangeOfString:errorRegex options:NSRegularExpressionSearch].location != NSNotFound;
|
||||
};
|
||||
|
||||
[self runTest:test module:moduleName initialProps:initialProps configurationBlock:configurationBlock expectErrorBlock:expectErrorBlock];
|
||||
}
|
||||
|
||||
- (void)runTest:(SEL)test module:(NSString *)moduleName initialProps:(NSDictionary *)initialProps configurationBlock:(void(^)(RCTRootView *rootView))configurationBlock expectErrorBlock:(BOOL(^)(NSString *error))expectErrorBlock
|
||||
{
|
||||
__weak id weakJSContext;
|
||||
|
||||
|
@ -110,6 +115,10 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init)
|
|||
vc.view = [UIView new];
|
||||
[vc.view addSubview:rootView]; // Add as subview so it doesn't get resized
|
||||
|
||||
if (configurationBlock) {
|
||||
configurationBlock(rootView);
|
||||
}
|
||||
|
||||
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:kTestTimeoutSeconds];
|
||||
while (date.timeIntervalSinceNow > 0 && testModule.status == RCTTestStatusPending && error == nil) {
|
||||
[[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
|
||||
|
|
Loading…
Reference in New Issue