【问题标题】:rspec capybara selector rails 4rspec 水豚选择器导轨 4
【发布时间】:2014-12-05 04:44:51
【问题描述】:

我正在尝试编写一个 rspec 测试;

  • 访问商店页面
  • 在“国家/地区”选择框中选择一个值
  • 并测试该值是否存在(最初在“国家/地区”框中,但我还将在第二次测试中测试依赖于国家/地区的城市)

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) 索引 失败/错误:访问 store_path 无方法错误: nil:NilClass 的未定义方法“id”

rails 控制台 [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

【问题讨论】:

    标签: ruby-on-rails rspec


    【解决方案1】:

    您是要访问特定的商店,还是列出所有商店?

    在您的情况下,您正在尝试访问特定商店,您需要为其传递参数,在这种情况下为商店 ID

    要知道在控制台中写入的确切路径:

    rake routes
    

    如果你想列出你需要写的所有商店,你会找到它的每个路径:

    stores_path
    

    代替:

    store_path
    

    store_path 是 /store/:id

    【讨论】:

    • 我在上面添加了路由和控制器,'/store' 路径被路由到 store_index.html.erb,这个页面有 3 个选择框,第一个是国家,然后是城市,货币。它是我希望测试的选择框中的值。
    • Country 模型有条目吗?可能在种子或什么的?因为如果没有,则表示 Country Model 中没有条目。在这种情况下,您正在尝试查找 nil 对象的 id 正如您在索引操作中所说: Country.first.id,要自己测试它,请尝试在索引操作中使用调试器
    • 你可以在种子中定义国家列表,或者尝试为它创建一个工厂
    • 您最后的评论是正确的,开发数据库已填充但测试为空,Poplate 测试数据库; rake db:reset RAILS_ENV=test rake db:migrate RAILS_ENV=test rake db:seed RAILS_ENV=test
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2016-03-22
    相关资源
    最近更新 更多