This example will never fail.  The value that the matcher memoizes is the string length, but they all have the same string length so wouldn't ever cause them to fail.  Instead I think you need to set a negative expectation:

``` ruby
expect {
  expect(["foo", "bar", "a"]).to all( have_string_length(3) )
}.to fail
```

In this case, if the string length is memoized the `all` expectation would pass but it should fail.