2016-11-16 53 views
1

フレームワークを使用して、BehatZombie.jsを使用して、エンドツーエンドのテストを行っています。 createアクションが失敗し、コントローラがフォームページにリダイレクトするケースをテストしています。Materialize:未定義のプロパティ 'badInput'を読み取ることができません

私は次の例外を取得:

And I press "Crear"  # WebContext::pressButton() 
    Error while processing event 'click': "TypeError: Cannot read property 'badInput' of undefined 
    at .<anonymous> (https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.4/js/materialize.min.js:8:22076) 
    at Function.each (https://code.jquery.com/jquery-2.1.1.min.js:2:2880) 
    at n.each (https://code.jquery.com/jquery-2.1.1.min.js:2:847) 
    at Object.Materialize.updateTextFields (https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.4/js/materialize.min.js:8:21969) 
    at HTMLDocument.<anonymous> (https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.4/js/materialize.min.js:8:22558) 
    at j (https://code.jquery.com/jquery-2.1.1.min.js:2:26860) 
    at Object.fireWith [as resolveWith] (https://code.jquery.com/jquery-2.1.1.min.js:2:27673) 
    at Function.ready (https://code.jquery.com/jquery-2.1.1.min.js:2:29467) 
    at HTMLDocument.I (https://code.jquery.com/jquery-2.1.1.min.js:2:29658) 
    at callListeners (/usr/lib/node_modules/zombie/node_modules/jsdom/lib/jsdom/events/EventTarget.js:170:34) 
     in http://localhost/myresource/create" (Behat\Mink\Exception\DriverException) 

最悪の部分は、これが実際のブラウザ(多分それはリダイレクトの原因は?)には発生しませんので、私はそれを再現する方法が分からないということです。

アイデア?

答えて

1

私はZombie.jsテスト1つの入力と簡単なHTMLページの

describe('User visits test page', function() { 
    const browser = new Browser(); 
    it('should open page ', function(done) { 
    browser.visit('/test', function() { 
    done(); 
    }); 
    }) 
}); 

と同じ問題に直面しています:

<html> 
    <head> 
    <title>Test</title> 
    <link rel="stylesheet" href="/vendor/materialize/css/materialize.min.css" /> 
    <script type="text/javascript" src="/vendor/jquery.min.js"></script> 
    <script type="text/javascript" src="/vendor/materialize/js/materialize.js"></script> 
    </head> 
    <body> 
    <label for="email">Email</label> 
    <input id="email" name="email" type="email" /> 
    </body> 
</html> 

input.validityが、この場合には定義されません。根本的な原因は私にとっては明らかではありません。しかし、私が実体化するために、プルリクエストを作成しました

if ($(element).val().length > 0 
    || element.autofocus 
    || $(this).attr('placeholder') !== undefined) { 
     $(this).siblings('label').addClass('active'); 
    } else if ($(element)[0].validity) { 
     if ($(element)[0].validity.badInput === true) { 
     $(this).siblings('label').addClass('active'); 
     } 
     else { 
     $(this).siblings('label').removeClass('active'); 
     } 
    } 
    else { 
     $(this).siblings('label').removeClass('active'); 
    } 

$(input_selector).each(function(index, element) { 
    if ($(element).val().length > 0 
    || element.autofocus 
    ||$(this).attr('placeholder') !== undefined 
    || $(element)[0].validity.badInput === true) { 
     $(this).siblings('label').addClass('active'); 
    } 
    else { 
     $(this).siblings('label').removeClass('active'); 
    } 
    }); 

を変えmaterialize.jsを回避することができます。ここにa linkがあります。

+0

可能であれば、メジャーバージョンを更新することなく次の1つでブレークを変更した(明らかにセマンティックバージョニングに従っていません) –

+0

v '0.98にマージされます.0' –

関連する問題