web-dev-qa-db-ja.com

Jasmineを使用したinstanceofのテスト

私はジャスミンが初めてで、一般的にテストしています。コードの1つのブロックは、new演算子を使用してライブラリがインスタンス化されているかどうかを確認します。

 //if 'this' isn't an instance of mylib...
 if (!(this instanceof mylib)) {
     //return a new instance
     return new mylib();   
 }

Jasmineを使用してこれをテストするにはどうすればよいですか?

40
Mike Rifgin

Jasmineはマッチャーを使用してアサーションを行うため、独自のカスタムマッチャーを作成して、instanceofチェックなど、必要なものをチェックできます。 https://github.com/pivotal/jasmine/wiki/Matchers

特に、Writing New Matchersセクションをご覧ください。

3
Jeff Storey

何かがinstanceof [Object] Jasmineが jasmine.any

it("matches any value", function() {
  expect({}).toEqual(jasmine.any(Object));
  expect(12).toEqual(jasmine.any(Number));
});
82
Roger

instanceof 演算子を使用した、より読みやすい/直感的な(私の意見では)使用を好みます。

class Parent {}
class Child extends Parent {}

let c = new Child();

expect(c instanceof Child).toBeTruthy();
expect(c instanceof Parent).toBeTruthy();

完全を期すために、場合によってはprototype constructorプロパティを使用することもできます。

expect(my_var_1.constructor).toBe(Array);
expect(my_var_2.constructor).toBe(Object);
expect(my_var_3.constructor).toBe(Error);

// ...

[〜#〜] [〜#〜]オブジェクトが別のオブジェクトから継承されているかどうかを確認する必要がある場合、これは機能しないことに注意してください。

class Parent {}
class Child extends Parent {}

let c = new Child();

console.log(c.constructor === Child); // prints "true"
console.log(c.constructor === Parent); // prints "false"

継承のサポートが必要な場合は、instanceof演算子またはRogerのような jasmine.any() 関数を使用してください。提案された。

Object.prototype.constructor リファレンス。

28