Should contain vs. =~

I’m developing another view test. Relevant example:

it “should show the item’s url” do
rendered.should contain(“http://www.example.com”)
end

I’m calling render in a before block. I have other similar examples on
the page in which I’m simply using:

rendered.should =~ “…”

These all work fine, as does the first example I posted here. However,
when trying to express that first example with a regex (which I prefer),
the example fails:

it “should show the item’s url” do
rendered.should =~ /http://www.example.com/
end

Am I missing something?

Thanks,

Brennon B.
Software Researcher
Dundalk Institute of Technology
[email protected]
Ph.D. Researcher & Composer - Sonic Arts Research Centre
Queen’s University, Belfast
[email protected] / [email protected]

On Sep 6, 2010, at 8:15 AM, Brennon B. wrote:

I’m developing another view test. Relevant example:

it “should show the item’s url” do
rendered.should contain(“http://www.example.com”)
end

I’m calling render in a before block. I have other similar examples on the page in which I’m simply using:

rendered.should =~ “…”

These all work fine, as does the first example I posted here. However, when trying to express that first example with a regex (which I prefer), the example fails:

it “should show the item’s url” do
rendered.should =~ /http://www.example.com/
end

Am I missing something?

Please post the failure message.

On 6 Sep 2010, at 14:55, David C. wrote:

On Sep 6, 2010, at 8:15 AM, Brennon B. wrote:

I’m developing another view test. Relevant example:

it “should show the item’s url” do
rendered.should contain(“http://www.example.com”)
end

I’m calling render in a before block. I have other similar examples on the page in which I’m simply using:

rendered.should =~ “…”

These all work fine, as does the first example I posted here. However, when trying to express that first example with a regex (which I prefer), the example fails:

it “should show the item’s url” do
rendered.should =~ /http://www.example.com/
end

Am I missing something?

Failures:

  1. widgets/show.html.erb widget details should show the widget’s url
    Failure/Error: rendered.should =~ /http://www.example.com/
    expected: /http://www.example.com/,
    got: “http://www.example.com” (using =~)

I realise this is because of the escaped HTML output, but I’m not quite
sure what to do about it…

On Sep 6, 2010, at 9:20 AM, Brennon B. wrote:

On 6 Sep 2010, at 14:55, David C. wrote:

On Sep 6, 2010, at 8:15 AM, Brennon B. wrote:

I’m developing another view test. Relevant example:

it “should show the item’s url” do
rendered.should contain(“http://www.example.com”)
end

I’m calling render in a before block. I have other similar examples on the page in which I’m simply using:

rendered.should =~ “…”

These all work fine, as does the first example I posted here. However, when trying to express that first example with a regex (which I prefer), the example fails:

it “should show the item’s url” do
rendered.should =~ /http://www.example.com/
end

Am I missing something?

Failures:

  1. widgets/show.html.erb widget details should show the widget’s url
    Failure/Error: rendered.should =~ /http://www.example.com/
    expected: /http://www.example.com/,
    got: “http://www.example.com” (using =~)

I realise this is because of the escaped HTML output, but I’m not quite sure what to do about it…

I think contain is your best bet here, unless you actually want to
change the expectation so it includes the escaped characters.

FWIW,
David

On Sep 6, 2010, at 9:51 AM, Brennon B. wrote:

On 6 Sep 2010, at 15:39, David C. wrote:

On Sep 6, 2010, at 9:20 AM, Brennon B. wrote:

On 6 Sep 2010, at 14:55, David C. wrote:

On Sep 6, 2010, at 8:15 AM, Brennon B. wrote:

I’m developing another view test. Relevant example:

it “should show the item’s url” do
rendered.should contain(“http://www.example.com”)
end

I’m calling render in a before block. I have other similar examples on the page in which I’m simply using:

rendered.should =~ “…”

These all work fine, as does the first example I posted here. However, when trying to express that first example with a regex (which I prefer), the example fails:

it “should show the item’s url” do
rendered.should =~ /http://www.example.com/
end

Am I missing something?

Failures:

  1. widgets/show.html.erb widget details should show the widget’s url
    Failure/Error: rendered.should =~ /http://www.example.com/
    expected: /http://www.example.com/,
    got: “http://www.example.com” (using =~)

I realise this is because of the escaped HTML output, but I’m not quite sure what to do about it…

I think contain is your best bet here, unless you actually want to change the expectation so it includes the escaped characters.

I’ve got no problem doing that. On a related note, though, is there any possibility that Capybara matchers will ever be available in view/helper examples? should_contain is a little bit open-ended for my taste.

I’d like that very much, but, as things stand today, they’re bound to
the Capybara session, so they won’t work in view specs (which don’t have
a full request cycle). I’ve chatted w/ Jonas about this and he’s
interested in decoupling the matchers so we could use them against an
arbitrary string, but there’s no definite commitment to that or an ETA.

Wish I had better news than that, but that’s the state of things.

Cheers,
David

Capybara matchers I think will stay Capybara specific. However, you
can use this gem to test any kind of string containing html:
http://github.com/grimen/rspec_tag_matchers.

David: Maybe you should consider adding that gem to the rspec-rails
core or at least mention it in the docs. Need for it seems to be
popping up everywhere.

  • Toni

On 6 Sep 2010, at 15:39, David C. wrote:

On Sep 6, 2010, at 9:20 AM, Brennon B. wrote:

On 6 Sep 2010, at 14:55, David C. wrote:

On Sep 6, 2010, at 8:15 AM, Brennon B. wrote:

I’m developing another view test. Relevant example:

it “should show the item’s url” do
rendered.should contain(“http://www.example.com”)
end

I’m calling render in a before block. I have other similar examples on the page in which I’m simply using:

rendered.should =~ “…”

These all work fine, as does the first example I posted here. However, when trying to express that first example with a regex (which I prefer), the example fails:

it “should show the item’s url” do
rendered.should =~ /http://www.example.com/
end

Am I missing something?

Failures:

  1. widgets/show.html.erb widget details should show the widget’s url
    Failure/Error: rendered.should =~ /http://www.example.com/
    expected: /http://www.example.com/,
    got: “http://www.example.com” (using =~)

I realise this is because of the escaped HTML output, but I’m not quite sure what to do about it…

I think contain is your best bet here, unless you actually want to change the expectation so it includes the escaped characters.

I’ve got no problem doing that. On a related note, though, is there any
possibility that Capybara matchers will ever be available in view/helper
examples? should_contain is a little bit open-ended for my taste.

Thanks,
BB