私は別のクラスのインスタンスを作成するテスト対象のクラスを持っています。私は、そのコンストラクタが決して呼び出されないように、2番目のクラス全体をスタブしたいと思います。私は、このセットアップしている場合たとえば、:私のテストファイルでsinon:単なるメソッドではなく、クラス全体をスタブする方法
Test.js
class Test {
constructor() {
}
func() {
let foo = new Foo()
foo.hello()
}
}
foo.jsは
class Foo {
constructor() {
this.a = 1
this.b = 2
this.c = 3
console.log('original constructor')
}
hello() {
console.log('original hello')
}
goodbye() {
console.log('original goodbye')
}
}
を、私は何とか全体をスタブアウトしたいですFoo
クラスのため、私はTest.func()
のために私のテストを実行するとき、それは元のFoo
コンストラクタを呼び出すのではなく、返すスタブ付きコンストラクタ偽のFoo
オブジェクトです。私はhello
ファンクFoo
オブジェクトの機能をoriginal hello
の代わりにstubbed hello
をスタブするつもりです。
どうすればこのようなクラス全体をスタブすることができますか?
注:テストファイル内で使用できるスタブインスタンスを作成したくないです。コンストラクタ自体をスタブする必要があるので、スタック上の何かがコンストラクタを呼び出すと、スタブインスタンスが返されるようにします。 sinonのドキュメントで
私はそれを試してみたが、それは動作しません。これは、テストファイルで使用できるオブジェクトのスタブインスタンスを作成するようです。しかし、コンストラクタ自体をスタブしないので、スタックのどこかで呼び出されると、スタブコンストラクタが呼び出されます。 – ewok
これは変ですので、sinon.stub(obj)との違いです。 createStubInstance(MyConstructor)はコンストラクタ呼び出しです。 – rad
[このファイル](https://pastebin.com/0XjiJUQL)を実行します。テストファイルの中から 'stub.hello()'を呼び出すと、スタブされたメソッドが使用されることがわかります。しかし、 'Test.func'を呼び出して新しい' Foo'オブジェクトを作成し、 'hello()'を呼び出すと、元のコンストラクタとメソッド呼び出しが得られます。 – ewok