chai-spies-next

這是 Chai Spies 的一個分支,用於將 master 分支上的最新程式碼發佈到 NPM 模組。Chai spies 的開發進度已減緩,並且長期存在的問題阻礙了重要功能的發布。

差異

最近,chai-spies 引入了一個回歸錯誤,移除了 reset 方法。此模組透過保留該方法並使其可用來回復該回歸錯誤。

Chai Spies

這是 chai 斷言函式庫的一個附加外掛。它提供了最基本的功能間諜(spy)能力和測試。雖然對於小型模組來說很有用,但您可能需要更強大的東西。請查看 jack,這是一個功能齊全的模擬(mock)/ 存根(stub)/ 間諜(spy)斷言函式庫,可與 chai 一起使用。

這個函式庫主要旨在作為任何有興趣開發 chai 外掛的人的起點。如果正在開發模組,歡迎使用它作為起點。我也鼓勵使用編譯工具,使模組可以在 node.js 和瀏覽器中運作。

安裝

Node.js

Chai spies 可在 npm 上取得。

  $ npm install chai-spies

瀏覽器

在包含 chai.js 後,包含 chai-spies.js

<script src="chai-spies.js"></script>

外掛

如果您在瀏覽器中使用 chai-spies,則無需執行任何操作。它將偵測全域命名空間中的 chai 並自動使用。

如果您正在使用 node,以下是一段有用的程式碼。

var chai = require('chai')
  , spies = require('chai-spies');

chai.use(spies);

var should = chai.should()
  , expect = chai.expect;

為瀏覽器建置

如果您正在為 chai 開發附加元件,您可能會發現 support 資料夾的內容很有用。它直接包含將目錄中的所有 js 檔案打包以便在瀏覽器中使用的所有內容。如果沒有外部依賴項,則所有內容都將被打包並使用 CommonJS require 風格的載入器(由 folio 包裝,這是一個小型 JS 打包工具)。請參閱 support/compile.js 中的註解。

Chai Spies API 參考

建立間諜

在此模組中,間諜可以是空函式,也可以是包裝過的具名函式。一旦 chai 被擴展,您就可以透過 chai 自身的介面建立間諜。

function original () {
  // do something cool
}

var spy = chai.spy(original);

// then use in place of original
ee.on('some event', spy);

// or use without original
var spy_again = chai.spy();
ee.on('some other event', spy_again);

// or you can track an object's method
var array = [ 1, 2, 3 ];
chai.spy.on(array, 'push');

// or you can track multiple object's methods
chai.spy.on(array, 'push', 'pop');

array.push(5);

// and you can reset the object calls
array.push.reset();

// or you can create spy object
var object = chai.spy.object([ 'push', 'pop' ]);
object.push(5);

// or you create spy which returns static value
var spy = chai.spy.returns(true);

spy(); // true

斷言

.spy

斷言物件是一個間諜。

expect(spy).to.be.spy;
spy.should.be.spy;

.called

斷言間諜已被呼叫。否定會通過。

expect(spy).to.have.been.called();
spy.should.have.been.called();

請注意,called 可以用作可鏈式的方法。

.with

斷言間諜至少被使用給定的參數呼叫過一次,即使提供了更多參數。

spy('foo');
expect(spy).to.have.been.called.with('foo');
spy.should.have.been.called.with('foo');

對於 spy('foo', 'bar')spy(); spy('foo') 也會通過。

如果與多個參數一起使用,則斷言間諜至少被使用所有給定的參數呼叫過一次。

spy('foo', 'bar', 1);
expect(spy).to.have.been.called.with('bar', 'foo');
spy.should.have.been.called.with('bar', 'foo');

.with.exactly

與 .with 類似,但僅在參數列表與提供的參數完全相同時才會通過。

spy();
spy('foo', 'bar');
expect(spy).to.have.been.called.with.exactly('foo', 'bar');
spy.should.have.been.called.with.exactly('foo', 'bar');

對於 spy('foo')spy('bar')spy('bar'); spy('foo')spy('foo'); spy('bar')spy('bar', 'foo')spy('foo', 'bar', 1) 將不會通過。

也可以用於僅有一個參數的呼叫。

.always.with

斷言每次呼叫間諜時,參數列表都包含給定的參數。

spy('foo');
spy('foo', 'bar');
spy(1, 2, 'foo');
expect(spy).to.have.been.called.always.with('foo');
spy.should.have.been.called.always.with('foo');

.always.with.exactly

斷言間諜從未使用與提供的參數不同的參數列表呼叫過。

spy('foo');
spy('foo');
expect(spy).to.have.been.called.always.with.exactly('foo');
spy.should.have.been.called.always.with.exactly('foo');

.once

斷言間諜只被呼叫過一次。

expect(spy).to.have.been.called.once;
expect(spy).to.not.have.been.called.once;
spy.should.have.been.called.once;
spy.should.not.have.been.called.once;

.twice

斷言間諜只被呼叫過兩次。

expect(spy).to.have.been.called.twice;
expect(spy).to.not.have.been.called.twice;
spy.should.have.been.called.twice;
spy.should.not.have.been.called.twice;

.exactly(n)

斷言間諜只被呼叫過 n 次。

expect(spy).to.have.been.called.exactly(3);
expect(spy).to.not.have.been.called.exactly(3);
spy.should.have.been.called.exactly(3);
spy.should.not.have.been.called.exactly(3);

.min(n) / .at.least(n)

斷言間諜至少被呼叫過 n 次。

expect(spy).to.have.been.called.min(3);
expect(spy).to.not.have.been.called.at.least(3);
spy.should.have.been.called.at.least(3);
spy.should.not.have.been.called.min(3);

.max(n) / .at.most(n)

斷言間諜最多被呼叫過 n 次。

expect(spy).to.have.been.called.max(3);
expect(spy).to.not.have.been.called.at.most(3);
spy.should.have.been.called.at.most(3);
spy.should.not.have.been.called.max(3);

.above(n) / .gt(n)

斷言間諜被呼叫超過 n 次。

expect(spy).to.have.been.called.above(3);
expect(spy).to.not.have.been.called.gt(3);
spy.should.have.been.called.gt(3);
spy.should.not.have.been.called.above(3);

.below(n) / .lt(n)

斷言間諜被呼叫少於 n 次。

expect(spy).to.have.been.called.below(3);
expect(spy).to.not.have.been.called.lt(3);
spy.should.have.been.called.lt(3);
spy.should.not.have.been.called.below(3);

測試

測試是使用 mocha 在 BDD 介面中編寫的。可以使用 make test 執行 Node 測試。可以透過開啟 test/browser/index.html 來檢視瀏覽器測試。

貢獻者

專案:chai-spies 儲存庫使用年限:3 年 2 個月活躍天數:26 天提交次數:77 檔案數:12 作者:48 Jake Luer 62.3% 7 Glenn Jorde 9.1% 4 Keith Cirkel 5.2% 3 = 3.9% 3 Sergiy Stotskiy 3.9% 2 JamesMaroney 2.6% 2 PG Herveou 2.6% 2 Ryckes 2.6% 1 Veselin Todorov 1.3% 1 Steffen 1.3% 1 Daniel Walker 1.3% 1 Domenic Denicola 1.3% 1 Andre Jaenisch 1.3% 1 PG 1.3%

許可證

(MIT 許可證)

版權所有 (c) 2012 Jake Luer jake@alogicalparadox.com

特此授權,免費授予任何取得本軟體和相關文件檔案(「本軟體」)副本的人員,在不受限制的情況下處理本軟體,包括但不限於使用、複製、修改、合併、出版、分發、再授權和/或銷售本軟體副本的權利,並允許向被提供本軟體的人員授予這些權利,但須符合以下條件:

上述版權聲明和本許可聲明應包含在本軟體的所有副本或主要部分中。

本軟體「依現狀」提供,不附帶任何明示或暗示的擔保,包括但不限於適銷性、特定用途的適用性和不侵權的擔保。在任何情況下,作者或版權持有人均不對因軟體或使用或其他與軟體相關的交易而引起的任何索賠、損害或其他責任負責,無論是在合同訴訟、侵權訴訟還是其他訴訟中。