在ruby模块上调用函数

时间:2018-01-16 16:55:27

标签: ruby rspec

这是我的文件夹结构:

root
  - app
    - helpers
      - application_helper.rb
  - test
    - helpers
      - application_helper_test.rb

这是application_helper.rb的样子:

module ApplicationHelper
  def replace_links_with_urls(text)
    text.gsub(%r{<a[^>]*? href=['"]([^'"]*)?['"].*?>(.*?)</a>}m, "\\2 ( \\1 )")
  end
end

这是application_helper_test.rb的样子:

   require File.expand_path("../../../app/helpers/application_helper", __FILE__)
    describe ApplicationHelper do
      describe "#replace_links_with_urls" do
        it "does not replace non-links" do
          ApplicationHelper::replace_links_with_urls("ABC <b>bold</b>").should == "ABC <b>bold</b>"
        end
      end
  end

我得到的错误是:

NoMethodError: undefined method `replace_links_with_urls' for ApplicationHelper:Module

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您需要使用self声明您的函数,如下所示:

module ApplicationHelper
  def self.replace_links_with_urls(text)
    text.gsub(%r{<a[^>]*? href=['"]([^'"]*)?['"].*?>(.*?)</a>}m, "\\2 ( \\1 )")
  end
end

然后你可以使用:

来调用它
ApplicationHelper.replace_links_with_urls("asd")

或者在不使用self的情况下声明它,使用

包含模块
include ApplicationHelper

并调用函数

所以你的测试将是:

require File.expand_path("../../../app/helpers/application_helper", __FILE__)
include ApplicationHelper
describe ApplicationHelper do
    describe "#replace_links_with_urls" do
        it "does not replace non-links" do
            ApplicationHelper::replace_links_with_urls("ABC <b>bold</b>").should == "ABC <b>bold</b>"
        end
    end
end

另外,检查你发布的replace_links_with_urls函数的代码有两个def,不知道你的代码中是否有相同的拼写错误,或者只是在这里。