热门标签 | 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文件。

结果如下

有问题欢迎讨论 ????


推荐阅读
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
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社区 版权所有