Ruby on rails 不需要全名测试助手(railstutorial.org[Michale harlt]第5.6章练习4)

Ruby on rails 不需要全名测试助手(railstutorial.org[Michale harlt]第5.6章练习4),ruby-on-rails,ruby,ruby-on-rails-4,rspec,Ruby On Rails,Ruby,Ruby On Rails 4,Rspec,我刚刚完成了迈克尔·哈特尔的第五章练习(非常棒),但是第5.6节的练习4,我不明白它是如何工作的 我已经使用spec/requests/static\u pages\u spec.rb中的rspec创建了集成测试: shared_examples_for "all static pages" do it { should have_selector('h1', text: heading) } it { should have_title(full_title(page_titl

我刚刚完成了迈克尔·哈特尔的第五章练习(非常棒),但是第5.6节的练习4,我不明白它是如何工作的

我已经使用spec/requests/static\u pages\u spec.rb中的rspec创建了集成测试:

shared_examples_for "all static pages" do
    it { should have_selector('h1', text: heading) }
    it { should have_title(full_title(page_title)) }
  end
完整标题功能位于spec/support/utilities.rb下的支持目录中:

def full_title(page_title)
    base_title = "Ruby on Rails Tutorial Sample App"
    if page_title.empty?
        base_title
    else
        "#{base_title} | #{page_title}"
    end
end
include ApplicationHelper
这很有效。在5.6的练习4中,我们的任务是通过添加helpers目录和application\u helper\u spec.rb文件spec/helpers/application\u helper\u spec.rb来删除它:

require 'spec_helper'

describe ApplicationHelper do

    describe "full_title" do
        it "should include the page title" do
            expect(full_title("foo")).to match(/foo/)
        end

        it "should include the base title" do
            expect(full_title("foo")).to match(/^Ruby on Rails Tutorial Sample App/)
        end

        it "should not include a bar for the home page" do
            expect(full_title("")).not_to match(/\|/)
        end
    end
end
并编辑utilities.rb以仅包含一行spec/support/utilities.rb:

def full_title(page_title)
    base_title = "Ruby on Rails Tutorial Sample App"
    if page_title.empty?
        base_title
    else
        "#{base_title} | #{page_title}"
    end
end
include ApplicationHelper
我所有的考试都通过了


我的问题是如何。。?删除full\u titleutil函数,只添加application\u helper\u spec来测试full\u title之后,我的原始规范测试如何通过?

如果仔细阅读问题,他建议代码中存在冗余,可以进一步重构:

通过 为原始helper方法编写测试,如清单1所示 5.41。”

如果我们看一下清单5.29,他会说:

“当然,这本质上是列表中帮助程序的副本 4.2,但有两个独立的方法可以让我们捕获基本标题中的任何拼写错误。不过,这是一个可疑的设计,而且是一个更好的设计 (稍微高级一点)方法,它测试原始的完整标题 助手直接出现在练习中(第5.6节)。”

实际上,您已经在app/helpers/application_helper.rb文件中定义了这个函数。spec/support/utilities.rb文件中的一个简单include语句将从app/helpers/application_helper.rb加载所有函数,这就是测试仍然通过的原因


享受本教程其余部分的乐趣

如果你仔细阅读这个问题,他是在暗示代码中存在冗余,你可以进一步重构:

通过 为原始helper方法编写测试,如清单1所示 5.41。”

如果我们看一下清单5.29,他会说:

“当然,这本质上是列表中帮助程序的副本 4.2,但有两个独立的方法可以让我们捕获基本标题中的任何拼写错误。不过,这是一个可疑的设计,而且是一个更好的设计 (稍微高级一点)方法,它测试原始的完整标题 助手直接出现在练习中(第5.6节)。”

实际上,您已经在app/helpers/application_helper.rb文件中定义了这个函数。spec/support/utilities.rb文件中的一个简单include语句将从app/helpers/application_helper.rb加载所有函数,这就是测试仍然通过的原因


享受本教程其余部分的乐趣

如果你仔细阅读这个问题,他是在暗示代码中存在冗余,你可以进一步重构:

通过 为原始helper方法编写测试,如清单1所示 5.41。”

如果我们看一下清单5.29,他会说:

“当然,这本质上是列表中帮助程序的副本 4.2,但有两个独立的方法可以让我们捕获基本标题中的任何拼写错误。不过,这是一个可疑的设计,而且是一个更好的设计 (稍微高级一点)方法,它测试原始的完整标题 助手直接出现在练习中(第5.6节)。”

实际上,您已经在app/helpers/application_helper.rb文件中定义了这个函数。spec/support/utilities.rb文件中的一个简单include语句将从app/helpers/application_helper.rb加载所有函数,这就是测试仍然通过的原因


享受本教程其余部分的乐趣

如果你仔细阅读这个问题,他是在暗示代码中存在冗余,你可以进一步重构:

通过 为原始helper方法编写测试,如清单1所示 5.41。”

如果我们看一下清单5.29,他会说:

“当然,这本质上是列表中帮助程序的副本 4.2,但有两个独立的方法可以让我们捕获基本标题中的任何拼写错误。不过,这是一个可疑的设计,而且是一个更好的设计 (稍微高级一点)方法,它测试原始的完整标题 助手直接出现在练习中(第5.6节)。”

实际上,您已经在app/helpers/application_helper.rb文件中定义了这个函数。spec/support/utilities.rb文件中的一个简单include语句将从app/helpers/application_helper.rb加载所有函数,这就是测试仍然通过的原因


享受本教程其余部分的乐趣

谢谢,是的,我应该检查app/hepers/application\u helper.rb,因为我正在创建一个更加合理的spec/helpers/application\u helper\u spec.rb。我只是太专注于utilities.rb,没有意识到规范实际上在测试什么。谢谢谢谢,是的,我应该检查app/hepers/application\u helper.rb,因为我正在创建一个更加合理的spec/helpers/application\u helper\u spec.rb。我只是太专注于utilities.rb,没有意识到规范实际上在测试什么。谢谢谢谢,是的,我应该检查app/hepers/application\u helper.rb,因为我正在创建一个更加合理的spec/helpers/application\u helper\u spec.rb。我只是太专注于utilities.rb,没有意识到规范实际上在测试什么。谢谢谢谢是的,我应该根据我创建的事实检查app/hepers/application_helper.rb