【问题标题】:Test fails when run from rake, passes when run directly从 rake 运行时测试失败,直接运行时通过
【发布时间】:2015-01-21 23:06:06
【问题描述】:

运行 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"

我的班级:

#!/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

【问题讨论】:

  • rake 时是否有多个测试运行?如果是这样,它们是按随机顺序完成的吗/所讨论的测试不是第一个?
  • 有多个测试。有问题的测试可以在组中的任何位置运行。如果我将模式更改为仅匹配相关测试,也是一样的。
  • 您使用的操作系统可能是这种情况下的一个重要因素。 \r\n 是 windows 中的行分隔符,\n 是 *nix 中使用的。严格来说,正则表达式中的 '\r' 不应与测试数据中的 '\n' 匹配。从命令行执行时,有一些环境因素导致这一点被忽略。

标签: ruby rake


【解决方案1】:

唯一让我印象深刻的是,您使用'\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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 1970-01-01
    • 2022-10-13
    • 2019-12-18
    相关资源
    最近更新 更多