在react-native doc中,它会检查UIExploreIntegrationTest。它似乎需要在Xcode上进行一些设置,因为它使用Objective C代码(* .m)。我是Obj-C测试的新手。我可以知道如何在Xcode上设置集成测试吗?
答案 0 :(得分:1)
通过一些猜测,我能够确定在iOS上运行集成测试的几个步骤。但是,我仍在研究如何使Android集成测试正常运行。
继续从RN github复制IntegrationTests.js并创建一个名为Tests.js的新JS文件
将这两个文件放在项目的根目录中。然后通过下载并将所有需求更改为刚刚创建的文件的一个require语句来更改IntegrationTests.js('./ Tests')
以下是Tests.js文件的基本实现:
'use strict';
var React = require('react');
var ReactNative = require('react-native');
var {
Text,
View,
} = ReactNative;
var { TestModule } = ReactNative.NativeModules;
var Tests = React.createClass({
shouldResolve: false,
shouldReject: false,
propTypes: {
RunSampleCall: React.PropTypes.bool
},
getInitialState() {
return {
done: false,
};
},
componentDidMount() {
if(this.props.TestName === "SomeTest"){
Promise.all([this.SomeTest()]).then(()=>
{
TestModule.markTestPassed(this.shouldResolve);
});
return;
}
},
async SomeTest(){
var one = 1;
var two = 2;
var three = one + two;
if(three === 3){
this.shouldResolve = true;
}else{
this.shouldResolve = false;
}
}
render() : ReactElement<any> {
return <View />;
}
});
Tests.displayName = 'Tests';
module.exports = Tests;
以下是Tests.m文件的基本实现(在xcode中)
#import <UIKit/UIKit.h>
#import <XCTest/XCTest.h>
#import <RCTTest/RCTTestRunner.h>
#import "RCTAssert.h"
#define RCT_TEST(name) \
- (void)test##name \
{ \
[_runner runTest:_cmd module:@#name]; \
}
@interface IntegrationTests : XCTestCase
@end
@implementation IntegrationTests
{
RCTTestRunner *_runner;
}
- (void)setUp
{
_runner = RCTInitRunnerForApp(@"IntegrationTests", nil);
}
- (void)test_SomeTest
{
[_runner runTest:_cmd
module:@"Tests"
initialProps:@{@"TestName": @"SomeTest"}
configurationBlock:nil];
}
@end
您还需要将node_modules / react-native / Libraries / RCTTest / RCTTest.xcodeproj中的RCTTest添加到您的库中。然后,您需要将您添加到该项目的产品libRCTTest.a拖动到常规选项卡中的主目标的链接框架和库。
^^该路径可能稍微不正确
然后,您需要编辑方案并将环境变量CI_USE_PACKAGER设置为1
因此,如果您执行所有这些步骤,则应该进行简单的测试运行并通过。之后应该很容易扩展。对不起,如果我的回答有点草率,请告诉我您是否有任何疑问。