热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

React项目搭建基于Karma的CI环境

简介在浏览Github的时候是否经常看到这样的CI图标呢?本文即为介绍如何为基于React的项目配置CircleCI的自动化测试环境源码在此本地实现项目依赖如下:devDepen

react

简介

在浏览Github的时候是否经常看到这样的CI图标呢?

本文即为介绍如何为基于React的项目配置CircleCI的自动化测试环境
源码在此

本地实现

项目依赖如下:

"devDependencies": {

"jasmine-core": "^2.4.1",

"karma": "^0.13.19",

"karma-jasmine": "^0.3.6",

"karma-phantomjs-launcher": "^1.0.0",

"karma-sourcemap-loader": "^0.3.7",

"karma-spec-reporter": "0.0.23",

"karma-webpack": "^1.7.0",

"phantomjs-prebuilt": "^2.1.3",

"webpack": "^1.12.1",

"eslint-plugin-react": "^3.11.1",

"babel-core": "^5.8.24",

"babel-loader": "^5.3.2",

"babel-eslint": "^5.0.0-beta6",

"css-loader": "^0.18.0",

"phantomjs-polyfill": "0.0.1",

"style-loader": "^0.12.3"

},

"dependencies": {

"react": "^0.14.7",

"react-addons-test-utils": "^0.14.7",

"react-dom": "^0.14.7"

}

是基于phantomjs作为运行环境,Karma作为Test Runner的工程结构。

karma.conf.js

const webpack = require('webpack')

module.exports = function (config) {

config.set({

browsers: ['PhantomJS'],

singleRun: true,

frameworks: [ 'jasmine' ],

files: [

'./node_modules/phantomjs-polyfill/bind-polyfill.js',

'./unit-test.webpack.js'

],

preprocessors: {

'./unit-test.webpack.js': [ 'webpack', 'sourcemap' ]

},

reporters: [ 'spec' ],

plugins: [

require('karma-webpack'),

require('karma-jasmine'),

require('karma-phantomjs-launcher'),

require('karma-sourcemap-loader'),

require('karma-spec-reporter')

],

webpack: {

devtool: 'inline-source-map',

module: {

loaders: [

{ test: /\.(jpe?g|png|gif|svg)$/, loader: 'url', query: {limit: 10240} },

{ test: /\.js$/, exclude: /node_modules/, loaders: ['babel']},

{ test: /\.json$/, loader: 'json-loader' },

{ test: /\.scss$/, loader: 'style!css?modules&importLoaders=2&sourceMap&localIdentName=[local]___[hash:base64:5]!autoprefixer?browsers=last 2 version!sass?output }

]

},

resolve: {

modulesDirectories: [

'components',

'node_modules'

],

extensions: ['', '.json', '.js']

},

plugins: [

new webpack.NoErrorsPlugin(),

]

},

webpackServer: {

noInfo: true

}

})

}

unit-test.webpack.js

//All test case naming follow /-test\.js$/ regexp pattern.

const cOntext= require.context('./components', true, /-test\.js$/)

context.keys().forEach(context)

设置好工作环境后,我们可以写一个最基本的Component与对应的tests
Counter.js

import React, { Component } from 'react'

export default class Counter extends Component {

render() {

const { count } = this.props

return (

{ count }

)

}

}

client-test.js

import React from 'react'

import { renderIntoDocument } from 'react-addons-test-utils'

import ReactDOM from 'react-dom'

import Counter from '../Counter'

function renderComponent(count) {

const renderer = renderIntoDocument(

)

return ReactDOM.findDOMNode(renderer)

}

describe('Counter', () => {

it('should be renderered', () => {

const dom = renderComponent()

expect(dom).not.toBeUndefined()

})

it('should render correct number', () => {

const dom = renderComponent(10)

const count = dom.querySelector('#counter').textContent

expect(count).toBe('10')

})

})

现在即可以本地运行Karma start,结果图:

对接circleci

我们希望有自动化的CI环境,这样可以更方便团队开发。

本文以circleci为例。

关联好Github账号后,CI下的build目录中即可导入工程。

针对Node项目,circleci会自动运行npm run test,所以暂时没有必要配置相关的yml文件。

结果如下

有问题欢迎讨论 ????


推荐阅读
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • publicclassBindActionextendsActionSupport{privateStringproString;privateStringcitString; ... [详细]
  • linux网络子系统分析(二)—— 协议栈分层框架的建立
    目录一、综述二、INET的初始化2.1INET接口注册2.2抽象实体的建立2.3代码细节分析2.3.1socket参数三、其他协议3.1PF_PACKET3.2P ... [详细]
  • 本文详细记录了腾讯ABS云平台的一次前端开发岗位面试经历,包括面试过程中遇到的JavaScript相关问题、Vue.js等框架的深入探讨以及算法挑战等内容。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 本文详细介绍了C++中的构造函数,包括其定义、特点以及如何通过构造函数进行对象的初始化。此外,还探讨了转换构造函数的概念及其在不同情境下的应用,以及如何避免不必要的隐式类型转换。 ... [详细]
  • spring boot使用jetty无法启动 ... [详细]
  • 深入体验Python的高级交互式Shell - IPython
    IPython 是一个增强型的 Python 交互式 Shell,提供了比标准 Python 控制台更为强大的功能,适用于开发和调试过程。它不仅支持直接执行 Linux 命令,还提供了丰富的特性来提高编程效率。 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
author-avatar
与人无缘-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有