Karma是什麼:html
下面是Karma官網的描述:前端
The main goal for Karma is to bring a productive testing environment to developers. The environment being one where they don't have to set up loads of configurations, but rather a place where developers can just write the code and get instant feedback from their tests. Because getting quick feedback is what makes you productive and creative.node
簡單來講,Karma就是一個用於運行端到端的測試環境,Karma能夠用來運行Jasmine寫的單元測試和AngularJS提供的Angular_scenario寫的端到端測試。git
Karma的優點:angularjs
在之前的項目中都是使用的Concordion搭配Selenium作的端到端的測試,這種搭配好處在於描述性很強,Concordion寫出來的測試就是一本活的用戶文檔和需求文檔。github
很差的地方也很明顯,要求測試人員的開發能力,從零開始到第一個測試運行起來,這種方法須要很大的花費來配置環境以及搭建測試框架。這種模式是分層的,最下面是Page Object,每一個頁面的方法, 中間的是Test class,最上面的是UI描述,下面兩層都是須要使用到Selenium,Selenium才能提供web driver去操做瀏覽器,Concordion是html語法的,因此可以有不少表現樣式在測試中,所以能帶來質量很高的測試描述性,Concordion的測試能夠做爲需求和用戶文檔的所在。web
使用Concordion和Selenium搭配須要更多的花費來配置好端到端的測試環境和框架。我認爲選用哪一種方式作端到端的測試是能夠衡量的項目須要的。chrome
更多的關於Concordion和Selenium搭配的端到端測試請參考官網。shell
Karma配置簡單,對於前端是使用AngularJS的項目來講尤爲如此,由於大多數的依賴都已經在項目中了。其餘的web項目也可使用Karma來作測試,須要額外引入AngularJS的一些文件,使用Karma作測試的優點是顯而易見的。npm
Karma的環境配置(在Windows和Mac下都試驗過):
方式一:
npm install -g karma
npm install -g karma-ng-scenario
npm install -g phantomjs
方式二:
方式三:
一樣將已經安裝好的文件拷貝出來,放到項目的目錄中,在講運行karma的時候能夠講到怎麼將這些文件配置進去。
如何用Karma作端到端的測試:
module.exports = function(config) { config.set({ basePath : '', frameworks : ['jasmine'], files:[ '/unit/*.spec.js' ], port : 9876, browsers : ["PhantomJS"], singleRun : true, reporters : ["progress"], plugins : [ 'karma-jasmine' 'karma-chrome-launcher', ], }); };
module.exports = function(config) { config.set({ basePath : '/', frameworks : ['ng-scenario'], files:[ 'e2e/*.spec.js' ], proxies: { '/' : 'http://localhost:8080/' }, port : 9876, browsers : ["Chrome"], singleRun : true, reporters : ["progress"], plugins : [ 'karma-ng-scenario', 'karma-phantomjs-launcher', ], }); };
若是運行karma時發現問題時,能夠參考更多配置文件的屬性官網介紹。畢竟每一個人的項目結構也不同。
karma start config/karma.e2e.config.js
Karma與Maven的集成:
<build>
<plugins>
<plugin>
<groupId>com.kelveden</groupId>
<artifactId>maven-karma-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<goals>
<goal>start</goal>
</goals>
<configuration>
<workingDirectory>${basedir}/lib</workingDirectory>
<configFile>config/karma.e2e.config.js</configFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<build> <plugins> <plugin> <groupId>com.kelveden</groupId> <artifactId>maven-karma-plugin</artifactId> <version>1.5</version> <executions> <execution> <goals> <goal>start</goal> </goals> <configuration> <workingDirectory>${basedir}/lib</workingDirectory> <configFile>config/karma.unit.config.js</configFile> </configuration> </execution> <execution> <goals> <goal>start</goal> </goals> <configuration> <workingDirectory>${basedir}/lib</workingDirectory> <configFile>config/karma.e2e.config.js</configFile> </configuration> </execution> </executions> </plugin> </plugins> </build>
<workingDirectory>${basedir}/lib</workingDirectory>
替換爲(使用Windows的cmd.exe運行mvn clean install時):
<karmaExecutable>${basedir}/lib/karma.cmd</karmaExecutable>
或者替換爲(使用Windows的powershell或者其餘平臺運行mvn clean install時):
<karmaExecutable>${basedir}/lib/karma</karmaExecutable>
請注意大多數狀況下,在運行karma前須要啓動服務器哦~將web項目運行起來,對於server的啓動和中止的配置就不贅述了。
mvn clean install
有什麼能夠提升的部分:
從上面的配置能夠看出使用karma來構建咱們的測試是很方便,容易,快捷的,優點顯而易見,測試的語法也很簡單,很是容易上手,與後臺代碼是徹底解耦和的。可是和Concordion比起來,測試代碼的描述性並不強,還有就是每每容易忘記更新測試的描述在改了測試的意圖後。但願在寫測試的時候,也多考慮下測試的描述語句,但願能彌補下這點不足。
示例代碼,放在Github:Karma-Test
更多的單元測試的資料:AngularJS Unit Test