gpt4 book ai didi

ruby - 从 rake 运行时测试失败,直接运行时通过

转载 作者:太空宇宙 更新时间:2023-11-03 16:48:37 25 4
gpt4 key购买 nike

运行 Ruby 1.9.3,当我直接使用 ./test_mail.rb 运行我的测试时,它通过了。当我通过“rake test”运行它时,它失败了

  1) Failure:
test_initialization(TC_Test_mail) [/Users/lcuff/Software_Realm/eco/etl
/etl/etl_2.0/src/ruby/mail_processing/ruby_eco_classes/rake_example
/test_mail.rb:13]:
Expected: "Hi Mom"
Actual: "No subject specified"

我的类(class):

#!/usr/bin/env ruby

class MyMail

attr_reader :subject

def initialize( mail)

subject = mail.to_s[/Subject:.*\r?/]
if subject.nil?
subject = "No subject specified"
else
subject = subject.strip.gsub!(/Subject:\s/, '')
end
@subject = subject
end
end

我的测试代码:

#!/usr/bin/env ruby

gem 'minitest'
require 'minitest/autorun'
require_relative 'MyMail'

class TC_Test_mail < MiniTest::Unit::TestCase

def test_initialization
mock_mail = MiniTest::Mock.new
mock_mail.expect(:to_s, "Subject: Hi Mom\nDate 2014-04-01\n", [])
the_mail = MyMail.new(mock_mail)
assert_equal('Hi Mom', the_mail.subject )
mock_mail.verify
end
end

和 rakefile

require 'rake/testtask'

Rake::TestTask.new do |t|
t.pattern = "test_*.rb"
end

最佳答案

这里唯一让我印象深刻的是您使用 '\n' 来分隔单个字符串中的不同参数。

您的正则表达式匹配:/Subject:.*\r?/

但是你传递的是字符串:"Subject: Hi Mom\n...

我对 Rake 的具体了解不多,但根据我的经验,这些测试在批处理环境中执行的方式与直接调用时的环境条件略有不同。

可能是当您从命令行调用时,ruby 正则表达式引擎知道 '\r' 匹配 '\n',但在更纯粹的批处理中环境对你没有好处。

如果您将正则表达式更改为 /Subject:.*[\r]?[\n]?/,您应该会看到正确的跨平台操作。

事实上 /Subject:[^\r\n]*?/ 可能更简洁。

$ irb
irb(main):001:0> mail = "Subject: Hi Mom\nDate 2014-04-01\n"
=> "Subject: Hi Mom\nDate 2014-04-01\n"
irb(main):004:0> subject = mail.to_s[/Subject:[^\r]*/]
=> "Subject: Hi Mom\nDate 2014-04-01\n"
irb(main):005:0> subject = mail.to_s[/Subject:[^\r\n]*/]
=> "Subject: Hi Mom"

关于ruby - 从 rake 运行时测试失败,直接运行时通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28078548/

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