Mink icon indicating copy to clipboard operation
Mink copied to clipboard

fieldValueEquals does not support multiple select

Open Raphhh opened this issue 9 years ago • 4 comments

When I use the assert "assertFieldContains" on an element "select" with attribute "multiple", I have this error:

Notice: Array to string conversion in vendor/behat/mink/src/WebAssert.php line 678

This error correspond to the method WebAssert::fieldValueEquals():

$message = sprintf('The field "%s" value is "%s", but "%s" expected.', $field, $actual, $value);

$actual is an array, not a string as for a simple select.

Example:

// html
<form>
    <select id="alphabet-id" name="alphabet" multiple>
        <option value="a">a</option>
    </select>
</form>
// feature
...
Then the "alphabet-id" field should contain "a"

Spec:

PHP 5.6.22 "behat/behat": "^3.0", "behat/mink": "^1.7", "behat/mink-extension": "^2.2",

Raphhh avatar Jun 15 '16 08:06 Raphhh

Maybe there is a dedicated method for working with multiselects?

aik099 avatar Jun 15 '16 08:06 aik099

@aik099 the code of the method will work fine with multiple selects in WebAssert (the builtin step from MinkExtension will not as it cannot build an array here, but a custom step could define the array). The issue in WebAssert is only in the generated error message. So I suggest we support array values when building the string representation here (probably just using implode(', ', $value) when it is an array). There is no need to create a dedicated method doing the same assertion except for the error message building.

stof avatar Jun 24 '16 14:06 stof

Agreed.

aik099 avatar Jun 24 '16 14:06 aik099

@stof

  • the issue is on $actual (not $value)
  • preg_match needs also a string: Warning: preg_match() expects parameter 2 to be string, array given in vendor/behat/mink/src/WebAssert.php

ex:

if (is_array($actual)) {
    $actual = implode(',', $actual);
}

Raphhh avatar Jan 31 '18 11:01 Raphhh