# 測試
> 測試是保證你的插件質量的唯一途徑。這能使你的用戶有信心去使用,且能讓你更加輕松。
[編寫插件](../) > 測試
## 工具
大多數的插件使用 [mocha](https://github.com/visionmedia/mocha),[should](https://github.com/visionmedia/should.js) 以及 [event-stream](https://github.com/dominictarr/event-stream) 來做測試。下面的例子也將會使用這些工具。
## 測試插件的流處理(streaming)模式
```
var assert = require('assert');
var es = require('event-stream');
var File = require('vinyl');
var prefixer = require('../');
describe('gulp-prefixer', function() {
describe('in streaming mode', function() {
it('should prepend text', function(done) {
// 創建偽文件
var fakeFile = new File({
contents: es.readArray(['stream', 'with', 'those', 'contents'])
});
// 創建一個 prefixer 流(stream)
var myPrefixer = prefixer('prependthis');
// 將偽文件寫入
myPrefixer.write(fakeFile);
// 等文件重新出來
myPrefixer.once('data', function(file) {
// 確保它以相同的方式出來
assert(file.isStream());
// 緩存內容來確保它已經被處理過(加前綴內容)
file.contents.pipe(es.wait(function(err, data) {
// 檢查內容
assert.equal(data, 'prependthisstreamwiththosecontents');
done();
}));
});
});
});
});
```
## 測試插件的 buffer 模式
```
var assert = require('assert');
var es = require('event-stream');
var File = require('vinyl');
var prefixer = require('../');
describe('gulp-prefixer', function() {
describe('in buffer mode', function() {
it('should prepend text', function(done) {
// 創建偽文件
var fakeFile = new File({
contents: new Buffer('abufferwiththiscontent')
});
// 創建一個 prefixer 流(stream)
var myPrefixer = prefixer('prependthis');
// 將偽文件寫入
myPrefixer.write(fakeFile);
// 等文件重新出來
myPrefixer.once('data', function(file) {
// 確保它以相同的方式出來
assert(file.isBuffer());
// 檢查內容
assert.equal(file.contents.toString('utf8'), 'prependthisabufferwiththiscontent');
done();
});
});
});
});
```
## 一些擁有高質量的測試用例的插件
* [gulp-cat](https://github.com/ben-eb/gulp-cat/blob/master/test.js)
* [gulp-concat](https://github.com/wearefractal/gulp-concat/blob/master/test/main.js)
- gulp 中文文檔
- 入門指南
- gulp API 文檔
- 編寫插件
- 指導
- 使用 buffer
- 使用 Stream 處理
- 測試
- FAQ
- gulp 技巧集
- 整合 streams 來處理錯誤
- 刪除文件和文件夾
- 使用 watchify 加速 browserify 編譯
- 增量編譯打包,包括處理整所涉及的所有文件
- 將 buffer 變為 stream (內存中的內容)
- 在 gulp 中運行 Mocha 測試
- 僅僅傳遞更改過的文件
- 從命令行傳遞參數
- 只重新編譯被更改過的文件
- 每個文件夾生成單獨一個文件
- 串行方式運行任務,亦即,任務依賴
- 擁有實時重載(live-reloading)和 CSS 注入的服務器
- 通過 stream 工廠來共享 stream
- 指定一個新的 cwd (當前工作目錄)
- 分離任務到多個文件中
- 使用外部配置文件
- 在一個任務中使用多個文件來源
- Browserify + Uglify2 和 sourcemaps
- Browserify + Globs
- 同時輸出一個壓縮過和一個未壓縮版本的文件
- 改變版本號以及創建一個 git tag
- Swig 以及 YAML front-matter 模板