帮酷LOGO
  • 显示原文与译文双语对照的内容
An integration test framework for React Native.

  • 源代码名称:cavy
  • 源代码网址:http://www.github.com/pixielabs/cavy
  • cavy源代码文档
  • cavy源代码下载
  • Git URL:
    git://www.github.com/pixielabs/cavy.git
  • Git Clone代码到本地:
    git clone http://www.github.com/pixielabs/cavy
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/pixielabs/cavy
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • Cavy

    npm versionCircleCI

    Cavy logo

    Cavy 是一个跨平台集成测试框架,由 Pixie实验室

    本自述介绍了安装和设置 Cavy 。编写Cavy测试和 faq 。 有关如何使用 cavy 命令行 接口的信息,请查看 cavy-cli

    目录

    :它是如何工作的

    Cavy ( ab ) 使用反应的ref 生成函数,使你能够在应用程序的深嵌套件上引用和模拟操作。 使用模拟呈现器的酶插件不同,在宿主设备上运行时,运行在你的动态应用程序中( 比如 ) 。 你的Android或者iOS模拟器) 。

    和 持续集成

    默认情况下,当应用程序运行时,Cavy将测试结果输出到控制台。 但是,你也可以使用 Cavy 命令行 接口( Cavy cli ) 直接从 命令行 运行Cavy测试。 仅将 <Tester> 组件上的sendReport prop设置为 true ( 请参见下面) 。

    有关如何使用 cavy-cli完全自动化测试的详细信息,请参阅 cavy-cli自述文件。

    ,它适合哪里?

    我们构建了 Cavy,因为在写作时,本地化的反应只有几种可以用的测试方法:

    • 单元测试组件( ) 。
    • 浅渲染测试组件( ) 。
    • 在本机环境中测试,使用本机JS钩子( Appium ) 。
    • 在本机环境中完全测试( XCTest ) 。

    Cavy适合于在本地环境中进行浅呈现测试和测试。

    安装

    要开始使用 Cavy,请使用 yarn 安装它:

    yarn add cavy --dev

    或者 npm:

    npm i --save-dev cavy

    用法

    查看示例应用程序( 例如使用) 。 在这里运行:

    Sample app running

    1设置测试程序

    导入 TesterTestHookStore 和你的规格在你的顶级JS文件( 通常这是你的index.{ios,android}.js 文件) 。 实例化一个新 TestHookStore 并在 Tester 中呈现你的应用程序。

    // index.ios.jsimportReact, { Component } from'react';import { Tester, TestHookStore } from'cavy';importAppSpecfrom'./specs/AppSpec';importAppfrom'./app';consttestHookStore=newTestHookStore();exportdefaultclassAppWrapperextendsComponent {
     render() {
     return (
     <Tester specs={[AppSpec]} store={testHookStore} waitTime={4000}><App /></Tester> );
     }
    }

    测试仪

    Prop类型说明默认值
    规格( 必需)Array你的规格函数-
    存储( 必需)TestHookStore新实例化的TestHookStore组件-
    waitTime整型测试应等待查找组件的时间以毫秒为单位2000
    startDelay整型测试执行开始前的毫秒数0
    clearAsyncStorage布尔型如果 true,在每个测试 比如 之间清除AsyncStorage以删除已经登录的用户false
    sendReport布尔型如果是 true,Cavy将向 Cavy cli发送报告。false

    2.挂接组件

    通过添加引用并使用 generateTestHook 函数,向要测试的任何组件添加测试钩子。 然后导出父组件的钩子版本。

    generateTestHook 接受字符串作为第一个参数- 这是在测试中使用的标识符。 如果你还想设置自己的引用生成函数,则需要一个可选的第二个参数。

    // src/Scene.jsimportReact, { Component } from'react';import { TextInput } from'react-native';import { hook } from'cavy';classSceneextendsComponent {
     render() {
     return (
     <View><TextInput
     ref={this.props.generateTestHook('Scene.TextInput')}
     onChangeText={...}
     /></View> 
     );
     }
    }constTestableScene=hook(Scene);exportdefaultTestableScene;

    功能组件的英镑注释: 功能组件不能为它的赋值,因为它们没有实例。 我们建议使用重构函数 toClass 函数将它的转换为类组件。

    3编写测试用例

    编写引用连接的组件的spec函数。 请参见下面的,获取当前可用的spec-helper 函数列表。

    // specs/AppSpec.jsexportdefaultfunction(spec) {
     spec.describe('My feature', function() {
     spec.it('works', asyncfunction() {
     awaitspec.fillIn('Scene.TextInput', 'some string')
     awaitspec.press('Scene.button');
     awaitspec.exists('NextScene');
     });
     });
    }

    恭喜你现在已经准备好用开始测试你的应用程序。 你的测试将在你运行应用程序时自动运行。

    使用本机代码的应用程序

    在使用时,你需要将你的AppWrapper 作为主入口点,而不是你当前的App 组件,这样你才可以使用 React React

    AppRegistry.registerComponent('AppWrapper', () => AppWrapper);

    可用的规格助手

    功能说明
    fillIn(identifier, str)用字符串填充已经标识的组件
    组件必须响应 onChangeText
    press(identifier)按确定的组件
    组件必须响应 onPress
    pause(integer)暂停测试这里长度的时间( 毫秒)
    如果需要在执行前接收响应的时间,则为有用
    exists(identifier)如果可以识别组件,则返回 true ( 例如 。 当前在屏幕上)
    notExists(identifier)如上所述,但检查组件是否存在
    findComponent(identifier)返回已经识别的组件
    如果组件不响应 onChangeText 或者 onPress,则可以使用
    例如:
    const picker = await spec.findComponent('Scene.modalPicker');
    picker.open();

    编写你自己的spec助手

    想测试不包括在上面的东西? 编写你自己的规范 helper 函数 !

    在你希望测试失败的情况下,你的函数需要是异步的,并且应该抛出一个错误。 例如以下测试是否显示 <Text> 组件是否显示正确的文本。

    // specs/helpers.jsexportasyncfunctioncontainsText(component, text) {
     if (!component.props.children.includes(text)) {
     thrownewError(`Could not find text ${text}`);
     };
    }
    // specs/AppSpec.jsimport { containsText } from'./helpers';exportdefaultfunction(spec) {
     spec.describe('Changing the text', function() {
     spec.it('works', asyncfunction() {
     awaitspec.press('Scene.button');
     consttext=awaitspec.findComponent('Scene.text');
     awaitcontainsText(text, 'you pressed the button');
     });
     });
    }

    常见问题解答

    :与Appium的比较如何? 有什么好处?

    Cavy是Appium的比较工具。 关键区别在于Appium使用本机钩子访问组件( 辅助功能 id ),wheras Cavy使用本机代码。 这意味着Cavy直接位于你的本地环境( 与Android和iOS构建工作相同) 中,这样可以很容易地集成到你的应用程序中,而不。

    这让我能做什么?

    Jest是一个用于单元测试个体组件的有用工具,而Cavy是一个集成测试工具,允许你运行end-to-end用户界面测试。

    :如何支持无状态组件

    我们希望Cavy能更好地兼容无状态功能组件,并且很高兴看到它的依赖性更适合任务。 具体情况是,我们还不是 100%确定。 我们非常高兴地讨论了可能的 !

    在投稿之前,请阅读的执行代码。

    • 检查最新的主机,确保功能没有实现,或者者 Bug 尚未被修复。
    • 查看问题跟踪程序以确保某人已经没有请求它并/或者贡献它。
    • fork 项目。
    • 启动特征/修正分支。
    • 提交并推送直到你对自己的贡献满意。
    • 请尽量不要搞乱 package.json, 版本或者历史。 如果你想有自己的版本,或者者是必要的,那么很好,但是请隔离它自己的提交。



    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语