简介

在浏览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?outputStyle=expanded&sourceMap' }
]
},
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 (
<div>
<span id='counter'>{ count }</span>
</div>
)
}
}

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(
<Counter count={count}/>
)
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文件。

结果如下

有问题欢迎讨论

React项目搭建基于Karma的CI环境的更多相关文章

  1. React项目搭建与部署

    React项目搭建与部署 一,介绍与需求 1.1,介绍 1.1.1,React简介 React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React ...

  2. 基于webpack的React项目搭建(三)

    前言 搭建好前文的开发环境,已经可以进行开发.然而实际的项目中,不同环境有着不同的构建需求.这里就将开发环境和生产环境的配置单独提取出来,并做一些简单的优化. 分离不同环境公有配置 不同环境虽然有不同 ...

  3. 基于webpack的React项目搭建(一)

    前言 工欲善其事,必先利其器.为了更好的学习React,我们先简要的把开发环境搭建起来.本文主要介绍使用webpack搭建React项目,如果你对React或es6的基础语法还不了解,建议先去学习学习 ...

  4. react项目搭建及webpack配置

    1,配置webpack npm install -g webpack                       webpack的cli环境 npm install -g webpack-dev-se ...

  5. 车牌识别(end-to-end-for-chinese-plate-recognition)项目搭建基于Mxnet(Python 3.5)

    最近看到geihub上有个车牌识别的项目,感觉很有意思,从上面fork了一下弄到本地自己跑了下.在安装过程中遇到了一些问题,记录如下. 项目github连接:https://github.com/sz ...

  6. React项目搭建及依赖安装

    一.前提 首先保证node.js已安装完成... 安装完成后,打开cmd命令行,输入 node -v 和 npm -v 来查看版本号,如果显示则安装完成. 二.安装react脚手架 在cmd命令行中输 ...

  7. 基于webpack的React项目搭建(二)

    前言 前面我们已经搭建了基础环境,现在将开发环境更完善一些. devtool 在开发的过程,我们会经常调试,so,为了方便我们在chrome中调试源代码,需要更改webpack.config.js,然 ...

  8. 通过nginx搭建基于python的web环境

    前言: 在搭建开始前,我们先来梳理下web服务工作流程,先看下图: 1.用户(PC)向web服务器发起http请求 2.web服务器判断用户请求文件是否为静态文件,是则直接读取静态文件并返回给用户,不 ...

  9. react 项目搭建

    1.首先运行环境-node是必须的,需要下载安装node的运行环境: 2.安装好了node之后,自然的就有了npm: 3.npm install -g creact-react-app/全局安装cre ...

随机推荐

  1. Java对象的初始化

    昨天写的代码被殷老师诟病了,因为太「丑陋」. 原来我的代码结构是这样的: public class ColorRocognizer { ..... public static void main(St ...

  2. POJ 3764 The xor-longest( 树上异或前缀和&字典树求最大异或)

    In an edge-weighted tree, the xor-length of a path p is defined as the xor sum of the weights of edg ...

  3. 「LOJ#103」子串查找 (Hash

    题目描述 这是一道模板题. 给定一个字符串 A A A 和一个字符串 B B B,求 B B B 在 A A A 中的出现次数.AAA 和 BBB 中的字符均为英语大写字母或小写字母. A A A 中 ...

  4. 洛谷 1082 同余方程——exgcd(水题)

    题目:https://www.luogu.org/problemnew/show/P1082 大水题. #include<iostream> #include<cstdio> ...

  5. JAVA 内部类 (三)实例

    为什么要用内部类:控制框架 一个“应用程序框架”是指一个或一系列类,它们专门设计用来解决特定类型的问题.为应用应用程序框架,我们可从一个或多个类继承,并覆盖其中的部分方法.我们在覆盖方法中编写的代码用 ...

  6. 注销ie中的ActiveX插件

    最新在C#下开发ActiveX控件,遇到一个问题,就是在调试的时候,ActiveX就已经注册在了调试目录下,这样即使安装这个插件,也无法注册到ActiveX的安装目录下.为了解决这个问题,需要注销下调 ...

  7. Java编程环境IntelliJ IDEA

    1. 下载并安装jdk,进行配置 https://www.cnblogs.com/zhangchao0515/p/6806408.html 2. 下载并安装 IntelliJ IDEA, 并进行破解 ...

  8. APP开发过程中需求变更流程

    在APP开发过程中,不可避免的会有需求变更,从以往项目开发过程总结发现,需求变更太频繁,产品一句话需求,没有形成良好的版本迭代概念,频繁的变动影响开发交付日期,但是交付日期又是定死的,严重拖累了开发及 ...

  9. c++中IO输入输出流总结<二>

    1 文件的打开和关闭 1.1 定义流对象 ifsteam iflie;//文件输入流对象 ifsteam iflie;//文件输出流对象 fsteam iflie;//文件输入输出流对象 1.2 打开 ...

  10. PaddlePaddle分布式训练及CTR预估模型应用

    前言:我在github上创建了一个新的repo:PaddleAI, 准备用Paddle做的一系列有趣又实用的案例,所有的案例都会上传数据代码和预训练模型,下载后可以在30s内上手,跑demo出结果,让 ...