機能があるとしましょう
Func a() {
//Do Something
let c = b();
return c;
}
関数aとモックをテストしたいb()そしてモックでcを割り当てたいSinon.Stub(Test、 "b")。returns( "DummyValue"); cはDummyValueが割り当てられます。
どうやってやるの?
describe("a", () => {
let a = a();
//mock b();
action = execute(a);
expect(action).should.return.("DummyValue");
})
同じファイルに2つの関数があり、そのうちの1つをスタブ化して、もう1つをテストしたい場合。例:テスト:tests.js
let ComputeSumStub = sinon.stub(OfflineLoader, "ComputeSum");
const ans = function ()
{
return 10;
};
ComputeSumStub.returns(ans);
const actualValue: number = OfflineLoader.sum();
expect(actualValue).to.be.equal(10);
開発:foo.js
function sum(): number
{
return ComputeSum(8, 9);
}
function ComputeSum(a: number, b: number): number
{
return a + b;
}
コンパイル後、関数は完全な名前で異なるシグネチャでエクスポートされ、スタブ中にグローバル関数をスタブしますが、他の関数内からそれを呼び出すときにローカル関数を呼び出すため、これは機能しません。そのための回避策があります。
foo.js
const factory = {
a,
b,
}
function a() {
return 2;
}
function b() {
return factory.a();
}
module.exports = factory;
test.js
const ser = require('./foo');
const sinon = require('sinon');
const aStub = sinon.stub(ser, 'a').returns('mocked return');
console.log(ser.b());
console.log(aStub.callCount);
この場合、シノンスタブの方がモックよりも適切ですモックvsスタブを使用する場合
原則として、特定の呼び出しにアサーションを追加しない場合は、モックしないでください。代わりにスタブを使用してください。
テストでのアサーションは、関数の特定の呼び出し、つまり1回目または3回目の呼び出しではなく、すべての呼び出しに対するものです。
これは、呼び出される方法(引数または呼び出しの数)に関係なく常に同じ結果を返すようにスタブをプログラムしているため、これをtelにすることができます。
シノンスタブ関数を関数aの引数として渡します。
Function a(b) {
const c = b();
return c;
}
test.js
require("sinon")
describe("a", () => {
const stub = sinon.stub();
stub.returns("DummyValue");
expect(a(stub)).to.eql.("DummyValue");
})
これらの変数宣言は決して再割り当てされないため、constを使用できることに注意してください。
関数のみスタブできます
sinon
のようなテストダブルライブラリで偽造します。import
またはrequire
を介してロードされます)。そのような場合、proxyquire
を使用して、テスト中のモジュールの偽のb
関数を渡すことができます。関数自体は、sinon
または他のテストdoubleライブラリによって偽造される可能性があります。