2016-04-29 17 views
2

これは単純な解決策を持つかもしれませんが、私はそれを見ていません。私は、分度器のテストを書き込み、ページオブジェクトファイルを設定してい取得 "未定義の[メソッド] 'プロパティを読み取ることができません

newstate.js(ページオブジェクトファイル)

'use strict'; 

var newstate = function (url) { 
    browser.get(url); 
}; 

newstate.prototype = Object.create({}, { 
    dd: { select: function(state) { $('select option[value="'+state+'"]').click(); } } 
}); 

module.exports = newstate; 

spec.jsファイル:

'use strict'; 

var newstate = require('newstate.js'); 

describe('Testing newstate', function() { 
    var statePage; 
    beforeAll(function() { 
     statePage = new newstate('http://localhost:8080'); 
    }); 

    it('should select a state', function() { 
     statePage.dd.select('AK'); 
    }) 
}) 

conf.jsファイル:

exports.config = { 
    framework: 'jasmine', 
    specs: ['test-spec.js'], 
    useAllAngular2AppRoots: true, 
    jasmineNodeOpts: { 
     showColors: true 
    } 
}; 

私は分度器を実行すると、私が手:

$ protractor conf.js 
Failures: 
1) Testing newstate should select a state 
    Message: 
    Failed: Cannot read property 'select' of undefined 

私はnew newstate('...')を呼び出したときと同じように、ブラウザを起動してウェブページを開きますが、何らかの理由で自分のdd.select機能が表示されないようにしています。何が欠けているのか、間違っているのですか?ありがとう。

+1

コンストラクタを 'function Newstate(...) 'として宣言する方が良いでしょう – OrangeDog

答えて

2

Object.createの使用方法が間違っています。あなたのケースでは、適切な表記は次のようになります。

var newstate = function (url) { 
    browser.get(url); 
}; 

newstate.prototype = Object.create({ 
    dd: { select: function(state) { $('select option[value="'+state+'"]').click(); } } 
}); 

selectddオブジェクトに定義されていない理由は、Object.createへの第2引数は、提供あなたのようなプロパティを持つだけでオブジェクトproperty descriptor objectではないということです。

しかし、実際にはObject.createは必要ありません。newstate.prototype.dd = function() { /*...*/ }で十分です。

+0

実際にプロトタイプに入れる関数はかなりたくさんあります。あなたはどちらをお勧めしますか? 'newstate.prototyp.dd = ...'または 'Object.create()'メソッドを使用しますか? – Machtyn

+1

この場合、通常はプロトタイプだけでなく、継承を設定するため、Object.createを使用しない方が良いでしょう。それで、ここから利益は得られません。私は 'newstate.prototype = {constructor:newstate、dd:function(){}、もう一つはfunction(){}、...}'を使うだけです。 'constructor:newstate'は' newstate'のインスタンスが元のコンストラクタを指すコンストラクタ・プロパティを持っていることを確認することですが、これはあまり重要でないかもしれません。 – dfsq

関連する問題