【问题标题】:What is wrong with this Rspec test这个 Rspec 测试有什么问题
【发布时间】:2012-02-22 04:20:00
【问题描述】:

我是 TDD 测试驱动开发的新手,我正在尝试做我的前几个测试,即使我知道标题清楚地显示在页面上,我的测试也失败了

  response.should have_selector("title", :content => "Ruby on Rails | Home")

任何想法我做错了什么和/或在线某处是否有 rspec 助手列表。这是一个 rails 3.2.1 应用程序顺便说一句

更新测试失败并出现此错误

Failures:

  1) PagesController GET 'home' should have the right title
     Failure/Error: response.should have_selector("title", :content => "Ruby on Rails | Home")
       expected following output to contain a <title>Ruby on Rails | Home</title> tag:
       <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
     # ./spec/controllers/pages_controller_spec.rb:13:in `block (3 levels) in <top (required)>'

Finished in 0.17154 seconds
4 examples, 1 failure

Failed examples:

rspec ./spec/controllers/pages_controller_spec.rb:11 # PagesController GET 'home' should have the right title

我的 application.html.haml 是

!!! Strict
%html{ :xmlns => "http://www.w3.org/1999/xhtml", 'xml:lang'=>"en", :lang=>"en" }
%head
  %title= "Ruby on Rails | Home"
  = stylesheet_link_tag    "application", :media => "all"
  = javascript_include_tag "application"
  = csrf_meta_tags
%body
  = yield



  1) PagesController GET 'home' should have the right title
     Failure/Error: page.should have_selector("title", :content => "Ruby on Rails | Home")
     NameError:
       undefined local variable or method `page' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x000001011b22e8>
     # ./spec/controllers/pages_controller_spec.rb:13:in `block (3 levels) in <top (required)>'

Finished in 0.16401 seconds
4 examples, 1 failure

Failed examples:

rspec ./spec/controllers/pages_controller_spec.rb:11 # PagesController GET 'home' should have the right title

更新

这是我的规范控制器,除了有问题的测试之外,所有测试都通过了

require 'spec_helper'

describe PagesController do



  describe "GET 'home'" do

    subject { page }

    it "returns http success" do
      get 'home'
      response.should be_success
    end

    it "should have the right title" do
      get 'home'
      page.should have_selector("title", :content => "Ruby on Rails | Home")
    end

    it "should render template" do
      get 'home'
      response.should render_template('pages/home')
    end

  end

  describe "GET 'contact'" do
    it "returns http success" do
      get 'contact'
      response.should be_success
    end
  end

  describe "GET 'about'" do
    it "returns http success" do
      get 'about'
      response.should be_success
    end
  end

end

又一次更新...这是我在页面上查看源代码时的源代码

<!DOCTYPE html>
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
  <head>
    <title>Ruby on Rails | Home</title>
    <link href="/assets/application.css?body=1" media="all" rel="stylesheet" type="text/css" />
    <link href="/assets/pages.css?body=1" media="all" rel="stylesheet" type="text/css" />
    <script src="/assets/jquery.js?body=1" type="text/javascript"></script>
    <script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>

    <script src="/assets/pages.js?body=1" type="text/javascript"></script>
    <script src="/assets/application.js?body=1" type="text/javascript"></script>
    <meta content="authenticity_token" name="csrf-param" />
    <meta content="fi3Er/VJrzhpb5FPAcT0DYT9RFNu1oW3p4og5dg+jFc=" name="csrf-token" />
  </head>
  <body>
    <h1>Pages#home</h1>

    <p>
      Find me in app/views/pages/home.html
    </p>
  </body>
</html>

是的,另一个更新

gem 'rails', '3.2.1'
gem 'mysql2'


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer'

  gem 'uglifier', '>= 1.0.3'
end

group :development do
  gem 'rspec-rails', '2.8.1'
end

group :test do
  gem 'rspec', '2.8.0'
    gem 'webrat', '0.7.3'
end

gem 'jquery-rails'
gem "haml", "~> 3.1.4"

【问题讨论】:

  • 为什么这个测试失败了?你得到什么错误?
  • 请显示错误。你的 Gemfile 中有 webrat 吗?
  • @nathanvda - 用失败的测试更新了我的问题
  • @KleberS。 - 用失败的测试更新了我的问题
  • @Tamer 好的,现在请粘贴您的 views/pages/index.html.erb 内容文件。

标签: ruby-on-rails ruby ruby-on-rails-3 tdd automated-tests


【解决方案1】:

在您的 HAML 中,您的标题不应位于撇号之间。试试:

!!! Strict
%html{ :xmlns => "http://www.w3.org/1999/xhtml", 'xml:lang'=>"en", :lang=>"en" }
%head
  %title Ruby on Rails | Home
  = stylesheet_link_tag    "application", :media => "all"
  = javascript_include_tag "application"
  = csrf_meta_tags
%body
  = yield

另外,请确保在您的规范文件中包含 render_views

describe PagesController do
  render_views
.
.
end

如果这不起作用。尝试使用不同的 gem 版本的 Rspec - RSpec 2.0.0.beta.19 中有一个错误

group :development do
  gem 'rspec-rails', '2.0.0.beta.18'
end

group :test do
  gem 'rspec-rails', '2.0.0.beta.18'
  gem 'spork', '0.8.4'
end

【讨论】:

  • 你能详细说明一下吗...举个标题标签正确解决方案的例子
  • 我认为他的意思是你的%title 应该是%title= Ruby on Rails | Home 没有撇号。也试试。我不知道haml,所以我真的不能帮你。
  • 你需要撇号...未初始化的常量 ActionView::CompiledTemplates::Home
【解决方案2】:

正如我所看到的,您正在从 rails 教程电子书进行练习,因此,根据您安装的 rspec 和 ruby​​ 版本,以下内容对您的工作方式应该与对我完全相同(我实际上是此刻也在运行 rails 教程!)

尝试将content替换为text,如下所示:

response.should have_selector("title", text: "Ruby on Rails | Home")

上面的行对我来说很好。

另外,我注意到您使用的是response,您可能想尝试使用page

最终结果将是:

page.should have_selector("title", :content => "Ruby on Rails | Home")

希望对你有帮助。

编辑

确保您已在规范文件的第一行将page 声明为subject

例如:

require 'spec_helper'

describe "StaticPages" do

  subject { page }
  .
  .
end

是的另一个更新...这次是我的 Gemfile

gem 'rails', '3.2.1'
gem 'mysql2'


# Gems used only for assets and not required
# in production environments by default.
group :assets do
  gem 'sass-rails',   '~> 3.2.3'
  gem 'coffee-rails', '~> 3.2.1'

  # See https://github.com/sstephenson/execjs#readme for more supported runtimes
  # gem 'therubyracer'

  gem 'uglifier', '>= 1.0.3'
end

group :development do
  gem 'rspec-rails', '2.8.1'
end

group :test do
  gem 'rspec', '2.8.0'
    gem 'webrat', '0.7.3'
end

gem 'jquery-rails'
gem "haml", "~> 3.1.4"

编辑 这是您正在学习的教程中使用的Gemfile的相关部分。

group :development do
  gem 'rspec-rails', '2.6.1'
end

group :test do
  gem 'rspec-rails', '2.6.1'
  .
  .
end

【讨论】:

  • 验证webratrspec 的版本,并确保您使用的版本与教程中使用的版本相同。 Gemfile是你的目标。
  • 没问题。如果您遵循教程中的 rails 3.0,您会看到教程中使用的 rspec-rails 版本与您不同。
猜你喜欢
  • 1970-01-01
  • 2014-06-03
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多