2014-02-18 4 views
0

Я думаю, что тесты просмотра Rspec беспорядочны, потому что ссылки, которые ищут тесты, не являются частью фактического представления, а являются заголовком макета приложения.Rails view Rspec тесты не оправдали ожиданий

К примеру, у меня есть следующий код: RSpec

describe 'signups/new.html.erb' do 

    before :each do 
    render template: "signups/new", layout: "layouts/application" 
    end 

    it 'displays link to request pages not signup page' do 
    rendered.should have_link("Make a new request", href: new_request_path) 
    rendered.should_not have_link("Add me to the mailing list", href: new_signup_path) 
    end 

ошибка, что я получаю то, что ссылка «Добавить меня в список рассылки» был найден. Тем не менее, я уверяю вас, на локальном сервере это не так.

То, что происходит в окне ниже (опять же, это все из файла макеты/приложения, а не от подписок/новый):

<nav class="navbar navbar-inverse navbar-static-top" role="navigation"> 
    <div class="container"> 
    <div class="navbar-header"> 
     <a class="navbar-brand" href="<%= root_path %>">Home</a> 
     <a class="navbar-brand" href="<%= new_request_path %>">Make a new request</a> 
     <% if current_page?(new_signup_path) == false %> 
     <a class="navbar-brand" href="<%= new_signup_path %>">Add me to the mailing list</a> 
     <% end %> 
    </div> 
    </div> 
</nav> 

В основном это If/Then о том, что, когда вы находитесь в на странице регистрации не отображается ссылка для отправки пользователей на страницу регистрации. Тем не менее Rspec указывает, что эта ссылка присутствует. Любые мысли о том, почему?

Я так думаю, что тест не интерполирует утверждение if/then, но не уверен, как это исправить.

ответ

0

положить puts page.body прямо перед строкой rendered.should have_link("Make a new request", href: new_request_path) Я не думаю, что ваша спецификация даже на странице.

как так

it 'displays link to request pages not signup page' do 
    puts page.body 
    rendered.should have_link("Make a new request", href: new_request_path) 
    rendered.should_not have_link("Add me to the mailing list", href: new_signup_path) 
end 

EDIT:

перечитайте вопрос, мой предыдущий совет не все, что полезно, хотя puts page.body это хорошая вещь, чтобы помочь с тестами. Я думаю, возможно, это потому, что вы создаете signup/new, но это не путь, так что это не «текущая страница». Возможно, попробуйте redirect_to.

Попробуйте visit new_signups_path или любой ваш путь (проверить с rake routes где я имел puts.page.body Вы, вероятно, (я думаю, но это зависит от ваших других тестов) избавиться от до:. Каждый

+0

Хм, что это делает? Прямо сейчас я попробовал это, и это заставило другую ошибку за неправильное количество аргументов. 1) signups/new.html.erb отображает ссылку для запроса страниц, а не на странице регистрации ← [31mFailure/Error: ← [0m ← [31mputs page.body rendered .should have_link («Сделать новый запрос», href: new_request_path) ← [0m ← [31mArgumentError ← [0m: ← [31mwrong количество аргументов (1 для 0) ← [0m ← [36m # ./spec /views/signups/new.html.erb_spec.rb:15:in 'block (2 уровня) в '← [0m' – james

+0

он должен быть в отдельной строке. Он поместит html страницы, на которой он включен. – Sean

+0

Конечно, глупо меня. К сожалению, хотя я все еще получаю ту же ошибку: «1) signups/new.html.erb отображает ссылку на страницы запроса, а не страницу регистрации ← [31mFailure/Error: ← [0m ← [31mrendered.should_not has_link ("Добавить меня в m больной список", href: new_signup_path) ← [0m ← [31mCapybara :: ExpectationNotMet ← [0m: ← [31месяц не найти ссылку «Добавить меня в список рассылки», найти 1 matc h: "Добавить меня в список рассылки" ← [0m ← [36m # ./spec/views/signups/new.html.erb_spec.rb:17:in 'block (2 уровня) в '← [0m – james

0

На начало теста, вам нужно использовать Capybara, чтобы перейти на страницу регистрации.

Например, если регистрация маршрут/регистрация, вы бы назвали

visit '/signup' 

в вашем перед каждым блоком.

+0

Что я сделал, это заменить шаблон/макет рендеринга с посещением '/ signups/new', который является путь в рейк-маршрутах, а затем все мои тесты не удались = / – james

Смежные вопросы