【问题标题】:RoR and Rspec setting up a test using a while loopRoR 和 Rspec 使用 while 循环设置测试
【发布时间】:2013-09-01 21:02:43
【问题描述】:

好的,所以我想创建一个测试来检查所有页面是否都有特定的标题。但是我认为如果我可以在array 中包含页面标题会很好,这样我就不必为每个页面复制块。它允许我通过修改 pages array 来测试其他页面。

我遇到的问题是测试中没有插入页面变量。那么这是语法错误还是 Rspec 不允许在 it should do... 块内插值?

describe "LayoutLinks" do

    page = ["home", "contact", "about", "help"]
    i = page.count
    x = 0

    while x < i  
        it "should have a #{page[x]} page" do
        get "#{page[x]}"
        response.should have_selector("title", :content => "#{page[x]}")
        end
    x += 1
    end

end

测试显示以下故障:

  1) PagesController LayoutLinks should have a help page
     Failure/Error: get "#{page[x]}"
     ActionController::RoutingError:
       No route matches {:controller=>"pages", :action=>""}
     # ./spec/controllers/layout_links_spec.rb:14:in `block (3 levels) in <top (required)>'

  2) PagesController LayoutLinks should have a contact page
     Failure/Error: get "#{page[x]}"
     ActionController::RoutingError:
       No route matches {:controller=>"pages", :action=>""}
     # ./spec/controllers/layout_links_spec.rb:14:in `block (3 levels) in <top (required)>'

  3) PagesController LayoutLinks should have a about page
     Failure/Error: get "#{page[x]}"
     ActionController::RoutingError:
       No route matches {:controller=>"pages", :action=>""}
     # ./spec/controllers/layout_links_spec.rb:14:in `block (3 levels) in <top (required)>'

  4) PagesController LayoutLinks should have a home page
     Failure/Error: get "#{page[x]}"
     ActionController::RoutingError:
       No route matches {:controller=>"pages", :action=>""}

这里的失败错误很明显。它不应该说得到"#{page[x]}",而应该是get homeget about,等等......

我该如何补救?谢谢您的帮助。非常感谢:)

【问题讨论】:

    标签: ruby-on-rails rspec tdd


    【解决方案1】:

    尝试以下方法:

    describe "LayoutLinks" do
      %w(home contact about help).each do |page|
        it "should have a #{page} page" do
          get page
          response.should have_selector("title", content: page)
        end
      end
    end
    

    %w 创建一个字符串数组(空格变成逗号,所以你得到 ["home", "contact", etc])

    【讨论】:

    • 建议被重构并且get路由正确,但是page没有被插入为内容。不错的尝试。顺便说一句,我累了没有成功::content =&gt; "#{page}" too。
    • 下面的编辑response.should have_selector('title', :content =&gt; @page)让我变绿了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多