这是我的文件夹结构:
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
我做错了什么?
答案 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,不知道你的代码中是否有相同的拼写错误,或者只是在这里。