実際にTDDなどを勉強していて、例で学んでいます。
実際、スタブとモックを使用して、実際の単体テストを紹介するために、小さな (非常に小さな) ORM を構築しています。
私はこのように実行し、テストを実行し、いくつかの小さな実装 (getAll メソッド) を作成しました (失敗 -> テストをパスさせる -> リファクタリング)
実際、ここに私のコードがあります:
MongodbAdapter
export default class MongoAdapter{
getAll(){
return new Promise((resolve, reject)=>{
resolve(['a','b','c','d']);
});
}
}
MysqlAdapter
export default class MysqlAdapter{
getAll(){
return new Promise((resolve, reject)=>{
resolve(['a','b','c','d','e']);
});
}
}
FactoryAdapter クラス
import MysqlAdapter from './adapters/MysqlAdapter';
import MongoAdapter from './adapters/MongoAdapter';
export default class FactoryAdapter{
static get(name){
if(name.toLowerCase() === 'mysql') return new MysqlAdapter();
if(name.toLowerCase() === 'mongodb') return new MongoAdapter();
return null;
}
}
関連する単体テスト:
TestMongoAdapter
import FactoryAdapter from '../../app/FactoryAdapter';
let chai = require('chai');
let sinon = require("sinon");
let expect = chai.expect;
/** @test {MongoAdapter} */
describe('MongoAdapter class',function(){
/** @test {MongoAdapter#getAll} */
describe('MongoAdapter#getAll',function(){
it('Expect getAll() to equals [a,b,c,d]',function(done){
let adapter = FactoryAdapter.get('mongodb');
adapter.getAll().then((value)=>{
expect(value).to.deep.equal(['a','b','c','d']);
done();
});
});
});
});
他の2つについても同様です。この場合、私の質問は構文の方法ではありません。
質問
実際には、関係するアダプター内で MYSQL および MONGODB の DB ドライバーを使用したいと考えています。実際、私はどのような実装を行うべきかを知っています: FactoryAdapter.get でアダプターのインスタンスを作成するときに、アダプターのコンストラクター メソッド内でドライバーを渡します。
私の問題は、その時点から、コードを実装する前に、どのテストを作成する必要があるか (失敗する必要があるか) がわからないことです。