2016-04-22 7 views
0

私はちょうどTDDを使い始めています。私は奇妙な問題を抱えています。私は(簡単な)userモジュールの非常に簡単なテストを書いています。なんらかの理由で、このテストではhasOwnProperty関数が存在しないという不満があります。チャイの機能が見つかりません

テストコード:

var expect = require('chai').expect; 
var user = require('./user'); 

describe('Name', function() { 
    it('Should have a name', function() { 
    expect(user).to.have.ownProperty('name'); 
    }); 
    it('The name property should be a string', function() { 
    expect(user.name).to.be.a('string'); 
    }); 
    it('Should have non empty string as name', function() { 
    expect(user.name).to.have.length.above(0); 
    }); 
}); 

モジュール:

var user = Object.create(null); 

user.name = 'Name'; 

// exports 
module.exports = user; 

$ mocha test.jsを実行した後、最初のテストが失敗します。 Chai ownProperty reference

お勧めはありますか?ありがとう!

コンソール出力:

Name 
    1) Should have a name 
    ✓ The name property should be a string 
    ✓ Should have non empty string as name 


2 passing (12ms) 
1 failing 

1) Name Should have a name: 
    TypeError: obj.hasOwnProperty is not a function 
    at Assertion.assertOwnProperty (node_modules/chai/lib/chai/core/assertions.js:937:13) 
    at Assertion.ctx.(anonymous function) [as ownProperty] (node_modules/chai/lib/chai/utils/addMethod.js:41:25) 
    at Context.<anonymous> (test.js:6:26) 
+0

あなたのコンソールログplsを投稿する –

答えて

1

Object.create(null)が故にそれはオブジェクトのタイプのプロパティを継承しない、対象ユーザを作成するために使用されるプロトタイプがヌルであることを意味します。

代わりにこれを試してください。

var user = Object.create({}); 

user.name = 'Name'; 

// exports 
module.exports = user; 

あなたはhasOwnPropertyメソッドへのアクセス権を持っている、Object.create({})を使用する必要があります。

+0

すばらしい応答をありがとう!しかし私は1 qを持っていました: 'ownProperty'関数が' Object.prototype.hasOwnProperty'に実際にマップされていることをどうお知りになりますか? Chaiが提供している関数だと思った。 – aryzing

+0

Chaiはテストライブラリであり、プロパティが 'ownProperty'かどうかを確認するためにJavascript Objectプロトタイプにアクセスする必要があります。プロパティがownPropertyかどうかを確認する他の方法はありません。 –

+0

素晴らしい、ありがとう! – aryzing

関連する問題