2016-11-16 139 views
1

我使用BehatZombie.js进行端到端测试,使用materializecss框架。我正在测试create操作失败并且控制器重定向回表单页面的情况。Materialise:无法读取属性'badInput'的undefined

我得到以下异常:

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

我面临着同样的问题用简单的HTML页面的Zombie.js测试

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在这种情况下不确定的。根本原因对我来说并不明确。但它可以用materialize.js改变

$(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'); 
    } 
    }); 

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'); 
    } 

我创建pull请求兑现避免。这里是a link

+0

如果可能的话,当pull请求为'0.97.1'时,他们在下一个更新主要版本时引入了中断更改(显然,它们并没有遵循语义版本化) –

+0

它合并到v'0.98 .0' –