2017-06-16 10 views
0

私が間違っていることを理解するのは苦労しています。 サイモンモックが電話を受け付けない

私のようなJSクラスを持っている:

export default class A { 

    constructor(repository) { 
    this._repository = repository; 
    } 

    async process(date) { 
    // ... 

    this._repository.writeToTable(entry); 
    } 
} 

と私が使用してリポジトリを皮肉ってテストを書き込もうとしていますsinon.mock

これは私がこれまで持っているものです。

describe('A',() => { 
    describe('#process(date)',() => { 
    it('should work', async() => { 

     const repository = { writeToTable:() => {} }; 
     const mock = sinon.mock(repository); 

     const a = new A(repository); 

     await a.process('2017-06-16'); 

     mock.expects('writeToTable').once(); 
     mock.verify(); 
    }); 
    }); 
}); 

しかし、それは常にそれを言って失敗します

ExpectationError: Expected writeToTable([...]) once (never called) 

私は(console.logを追加して)チェックして、テストで定義したオブジェクトを呼び出しています。

+0

私はES2015とスーパー慣れていないよ非同期/のawait構築が、ES5あなたの中にテストが終了した後に呼び出されるテスト関数に引数コールバック関数を追加する必要があります。これは暗黙ですか?あるいは、関数の前に 'async'を置くことがPromiseを返すことを意味するのであれば、これはMochaサポートがテスト関数に約束を返すように働くはずです。 – oligofren

答えて

1

私はこれをローカルで実行し、sinonjs.orgのドキュメントを読んで、すべてのことを正しく行っているようです。

私はspyを使用して再書き込みあなたの例を試してみましたが、通過テストを取得するには、このようなものになってしまった:

import sinon from "sinon"; 
import { expect } from "chai"; 

import A from "./index.js"; 

describe("A",() => { 
    describe("#process(date)",() => { 
    it("should work", async() => { 
     const repository = { writeToTable: sinon.spy() }; 

     const a = new A(repository); 

     await a.process("2017-06-16"); 

     expect(repository.writeToTable.calledOnce).to.be.true; 
    }); 
    }); 
}); 
+0

ありがとうKristjan。私はテストを変更しましたが、すべてが正しいように見えるにもかかわらず、なぜ動作していないのか理解したかったのです。 –

関連する問題