2014-12-04 3 views
1

Я пытаюсь написать rspec-тест, который будет;rspec capybara selector rails 4

  • посетить магазин страница
  • выберите значение в странах выберите поле
  • и испытание, что значение существует (сначала в поле стран, но я бы также испытывать для городов, которые зависят от страны, в второй тест)

HTML страницы

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Ruby on Rails Tutorial Sample App</title> 
    <link data-turbolinks-track="true" href="/assets/application.css?body=1" media="all" rel="stylesheet" /> 
<link data-turbolinks-track="true" href="/assets/custom.css?body=1" media="all" rel="stylesheet" /> 
<link data-turbolinks-track="true" href="/assets/password_resets.css?body=1" media="all" rel="stylesheet" /> 
<link data-turbolinks-track="true" href="/assets/people.css?body=1" media="all" rel="stylesheet" /> 
<link data-turbolinks-track="true" href="/assets/products.css?body=1" media="all" rel="stylesheet" /> 
<link data-turbolinks-track="true" href="/assets/scaffolds.css?body=1" media="all" rel="stylesheet" /> 
<link data-turbolinks-track="true" href="/assets/sessions.css?body=1" media="all" rel="stylesheet" /> 
<link data-turbolinks-track="true" href="/assets/static_pages.css?body=1" media="all" rel="stylesheet" /> 
<link data-turbolinks-track="true" href="/assets/store.css?body=1" media="all" rel="stylesheet" /> 
<link data-turbolinks-track="true" href="/assets/users.css?body=1" media="all" rel="stylesheet" /> 
    <script data-turbolinks-track="true" src="/assets/jquery.js?body=1"></script> 
<script data-turbolinks-track="true" src="/assets/jquery_ujs.js?body=1"></script> 
<script data-turbolinks-track="true" src="/assets/bootstrap.js?body=1"></script> 
<script data-turbolinks-track="true" src="/assets/turbolinks.js?body=1"></script> 
<script data-turbolinks-track="true" src="/assets/password_resets.js?body=1"></script> 
<script data-turbolinks-track="true" src="/assets/people.js?body=1"></script> 
<script data-turbolinks-track="true" src="/assets/products.js?body=1"></script> 
<script data-turbolinks-track="true" src="/assets/sessions.js?body=1"></script> 
<script data-turbolinks-track="true" src="/assets/static_pages.js?body=1"></script> 
<script data-turbolinks-track="true" src="/assets/store.js?body=1"></script> 
<script data-turbolinks-track="true" src="/assets/users.js?body=1"></script> 
<script data-turbolinks-track="true" src="/assets/application.js?body=1"></script> 
    <meta content="authenticity_token" name="csrf-param" /> 
<meta content="NcsV3Ve7QqLTjeLNz5MLuCxzvG8urc63NiDk7RZTGtM=" name="csrf-token" /> 
    <!--[if lt IE 9]> 
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> 
<![endif]--> 

    </head> 
    <body> 
    <header class="navbar navbar-fixed-top navbar-inverse"> 
    <div class="navbar-inner"> 
    <div class="container"> 
     <a href="/" id="logo">sample app</a> 
     <nav> 
     <ul class="nav btn-group navbar-nav navbar-right list-inline"> 
        <li><a href="/">Home</a></li> 
      <li><a href="/help">Help</a></li> 
      <li><a href="/signin">Sign in</a></li> 
     </ul> 
     </div> 
     </ul> 
     </nav> 
    </div> 
    </div> 
</header> 


     <div class="container"> 




<h2>some text</h2> 
<div class="row"> 
    <div class="col-md-4 col-md-offset-4"> 
    <div class="row"> 
     <div class="col-md-6 col-md-offset-2"> 
     <form accept-charset="UTF-8" action="/store/show" method="get"><div style="display:none"><input name="utf8" type="hidden" value="&#x2713;" /></div> 

      <label for="catalogue_country">Country</label> 
      <select id="countries_select" name="catalogue[country_id]"><option selected="selected" value="1">France</option> 
<option value="2">Italy</option> 
<option value="3">United Kingdom</option></select> 

     <div class="pull-right"> 
      <input class="btn brn-large btn-primary" name="commit" type="submit" value="Add to Cart" /> 
</form>  </div> 
     </div> 
    </div> 
    </div> 
</div> 


     <footer class="footer"> 
    <small> 
    <a href="http://railstutorial.org/">Rails Tutorial</a> 
    by Michael Hartl 
    </small> 
    <nav> 
    <ul> 
     <li><a href="/about">About</a></li> 
     <li><a href="/contact">Contact</a></li> 
     <li><a href="http://news.railstutorial.org/">News</a></li> 
    </ul> 
    </nav> 
</footer> 


     <pre class="debug_dump">--- !ruby/hash:ActionController::Parameters 
controller: store 
action: index 
</pre> 

    </div> 
    </body> 

</html> 

Мой тест

require 'spec_helper' 

describe "index" do 

    subject { page } 

    before do 

    visit store_path 

    select "United Kingdom", :from => "catalogue[country_id]" 

    end 

    it { should have_select('country_id', :selected => 'United Kingdom') } 

end 

Неудачи

Неудачи:

1) индекс Failure/Ошибка: Визит store_path NoMethodError: неопределенный метод `идентификатор» для ноль: NilClass

Рельсы консоли [ app.store_path] проверяет, что store_path является '/ store'

Выбранные поля являются динамическими союзник заселен в соответствии с указаниями в этом дневнике posting

Любой помощи ценятся, спасибо заранее

Есть маршруты

match '/store', to: 'store#index', as: :store, via: 'get' 

    get 'store/show' 

    match 'store/update_cities', to: 'store#update_cities', as: :update_cities, via: 'get' 

    match 'store/update_currencies', to: 'store#update_currencies', as: :update_currencies, via: 'get' 

Его один индекс страница (store_path), который имеет страны выберите поле ,

Это контроллер магазин

def index 

    @countries = Country.all 

    @cities = City.where("country_id = ?", Country.first.id) 

    @currencies = Currency.where("country_id = ?", Country.first.id) 

    @locations = Location.where("city_id = ?", Location.first.id) 

    @products = Product.where("Location_id = ?", Product.first.id) 

    @plugs = Plug.where("Location_id = ?", Plug.first.id) 

    end 

    def show 
    end 

    def update_cities 

    @cities = City.where("country_id = ?", params[:country_id]) 

    respond_to do |format| 

     format.js 

    end 
    end 

ответ

2

Вы пытаетесь посетить конкретный магазин или список всех магазинов?

в вашем случае, если вы пытаетесь посетить конкретный магазин, который нужно передать параметр для него в этом случае идентификатор магазина

Чтобы знать точный путь записи в консоли:

rake routes 

вы найдете каждый путь к его URL, если вы хотите, чтобы перечислить все магазины, нужно написать:

stores_path 

вместо:

store_path 

store_path является/магазин /: идентификатор

+0

Я добавил маршруты и контроллер выше, путь «/ магазин» направляется на store_index.html.erb, это одна страница имеет 3 полей выбора, во-первых стран , затем города, валюты. Его значения в ячейках выбора, которые я хочу проверить. – Conor

+0

У модели Country есть какие-либо записи? может быть в семенах или что-то в этом роде. Потому что, если это не так, это означает, что в Country Model нет записей.В этом случае вы пытаетесь найти id объекта nil. Как вы говорите в действии индекса: Country.first.id, Чтобы проверить его самостоятельно, попробуйте отладчик в действии индекса –

+0

. Вы можете либо определить список страны в семенах или попытаться создать завод для него –

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