Capybara и Rails, почему моя ссылка должна что-то вернуть? - PullRequest
1 голос
/ 14 января 2012

Я пытаюсь проверить, существует ли на странице доза ссылки, я попытался проверить все вложенные теги, содержащие тег ссылки, подобный этому:

response.body.should have_selector("div.page_margins div.page div#nav div.hlist ul li#2")

, и он проходит правильно, но, еслиЯ добавил тег ссылки к тесту следующим образом:

  response.body.should have_selector("div.page_margins div.page div#nav div.hlist ul li#2 a",:text => "Next")

Я получаю сообщение об ошибке:

Ожидается css "div.page_margins div.page div # nav div.hlist ulli # 2 a # next_page "с текстом" Next ", чтобы вернуть что-то

Если я проверю это с have_link следующим образом:

response.body.should have_link("div.page_margins div.page div#nav div.hlist ul li#2 a#next_page")

Я получу ошибку:

ожидаемая ссылка "div.page_margins div.page div # nav div.hlist ul li # 2 a # next_page" для возврата чего-либо

Может ли кто-нибудь помочь, пожалуйста?Я люблю рельсы, но мне все еще нужна рука, чтобы пройти тестирование ..

РЕДАКТИРОВАТЬ

Вот page.html, я заметил, чтоHTML в content_for, в котором отображается ссылка, не отображается в yield

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-type">
<title></title>
<script src="/assets/application.js" type="text/javascript"></script><link href="/assets/application.css" media="screen" rel="stylesheet" type="text/css">
<script type="text/javascript">
//<![CDATA[
var auto_log_off = false;
//]]>
</script><script type="text/javascript">
//<![CDATA[
var student_logged = false;
//]]>
</script><script src="/assets/sessions.js" type="text/javascript"></script><!-- add your meta tags here --><link href="/assets/application_yaml/css/my_layout.css" rel="stylesheet" type="text/css">
<!--[if lte IE 7]>  <![endif]--><link href="/assets/application_yaml/css/patch_my_layout.css" rel="stylesheet" type="text/css">
</head>
<body>
<div class="page_margins">
<a href="#dialog" name="modal"></a>
<div id="topnav">
<!-- start: skip link navigation -->
<a class="skip" href="#navigation" title="skip link">Skip to the navigation</a>
<span class="hideme">.</span>
<a class="skip" href="#content" title="skip link">Skip to the content</a>
<span class="hideme">.</span>
<!-- end: skip link navigation -->
</div>
<!-- start: skip link navigation -->
<!-- end: skip link navigation -->
<div class="page">
<div id="header">
<h1>Welcome to course builder!!</h1>
<p><a href="/" id="home_link">Home</a></p>
</div>
<div id="nav">
<!-- skiplink anchor: navigation -->
<a id="navigation" name="navigation"></a>
<div class="hlist">
<!-- main navigation: horizontal list -->

<div class="quiz_review_buttons">

<!--
<ul>
<li class="active"><strong>Button 1</strong></li>
<li><a href="#">Button 2</a></li>
<li><a href="#">Button 3</a></li>
</ul>
-->
</div>
<!-- <ul> -->
<!-- <li class="active"><strong>Button 1</strong></li> -->
<!-- <li><a href="#">Button 2</a></li> -->
<!-- <li><a href="#">Button 3</a></li> -->
<!-- <li><a href="#">Button 4</a></li> -->
<!-- <li><a href="#">Button 5</a></li> -->
<!-- </ul> -->
</div>
</div>
<div id="main">
<div id="col1">
<div class="clearfix" id="col1_content">
<!-- add your content here -->

<div class="debug_div">
<p>
<b>
devise/sessions#new
</b>
</p>
</div>
</div>
</div>
<div id="col3">
<div class="clearfix" id="col3_content">
<!-- add your content here -->
<div class="alert" id="notice_alert">You need to sign in or sign up before continuing.</div>
<script type="text/javascript"></script><!-- <div style="clear:both"></div> --><h2>Sign in for student</h2>

<form accept-charset="UTF-8" action="/students/sign_in" class="student_new" id="student_new" method="post">
<div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"></div>
  <div>
<label for="student_email">Email</label><br><input id="student_email" name="student[email]" size="30" type="email" value="">
</div>

  <div>
<label for="student_password">Password</label><br><input id="student_password" name="student[password]" size="30" type="password">
</div>

    <div>
<input name="student[remember_me]" type="hidden" value="0"><input id="student_remember_me" name="student[remember_me]" type="checkbox" value="1"><label for="student_remember_me">Remember me</label>
</div>

  <div><input name="commit" type="submit" value="Sign in"></div>
</form>

  <a href="/students/sign_up">Sign up</a><br><a href="/students/password/new">Forgot your password?</a><br>
</div>
<!-- IE Column Clearing -->
<div id="ie_clearing"> </div>
</div>
</div>
<div id="footer">
Layout based on
<a href="http://www.yaml.de/">YAML</a>
</div>
</div>
</div>
</body>
</html>

Ответы [ 2 ]

2 голосов
/ 14 января 2012

«ожидается что-то вернуть» просто означает, что капибара не смогла найти элемент, который искала.Трудно сказать, почему, не видя HTML, который ищет капибара

Обратите внимание, что аргумент have_link не является селектором css, это должен быть атрибут alt текста, идентификатора, заголовка или изображения ссылки.

0 голосов
/ 23 марта 2012

Кроме того, в спецификациях контроллера обязательно вызывайте render_views при проверке разметки..

...