gpt4 book ai didi

ruby-on-rails - 无法在 Rspec 单元测试 Rails 中测试模块内的方法

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:15 24 4
gpt4 key购买 nike

这是我的模块。我喜欢测试方法 load_csv

我引用了这个例子 Example Link

并编写了这段代码。下面是模块代码

require 'csv'

module DummyModule
class Test
def load_csv(filename)
CSV.read(filename, :row_sep => "\r", :col_sep => "\t")
end
end
end

这是我的Rspec

require 'spec_helper'

describe DummyModule do
let(:data) { "title\tsurname\tfirstname\rtitle2\tsurname2\tfirstname2\r" }
let(:result) { [["title", "surname", "firstname"], ["title2", "surname2", "firstname2"]] }
before(:each) do
@attribute_validator = TestAttributeValidator.new

end

it "should parse file contents and return a result" do
puts data.inspect
puts result.inspect
File.any_instance.stubs(:open).with("filename","rb") { StringIO.new(data) }
@attribute_validator.load_csv("filename").should eq(result)
end
end

class TestAttributeValidator
include DummyModule
end

它给了我这个错误

DummyModule should parse file contents and return a result
Failure/Error: @attribute_validator.load_csv("filename").should eq(result)
NoMethodError:
undefined method `load_csv' for #<TestAttributeValidator:0xd0befd>
# ./spec/extras/dummy_module_spec.rb:15:in `(root)'

请帮忙

最佳答案

你可能不想要你的

class Test

在您的 module 定义中。像这样,以下将起作用:

@attribute_validator_tester = TestAttributeValidator::Test.new
@attribute_validator_tester.respond_to? 'load_csv'
=> true

但这可能不是您想要的。将 module 包含到一个类中会将 module 的所有“功能”(即所有方法,还有常量和类)添加到 类中>module 包含在中。在您的示例中,您将 class Test 添加到 class TestAttributeValidator 的命名空间和此的实例类将具有您想要的方法 load_csv

只需省略 module 中的类定义,一切都会好起来的。

关于ruby-on-rails - 无法在 Rspec 单元测试 Rails 中测试模块内的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22755090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com