2017-04-26 4 views
0

Kann mir jemand erklären, was hier passiert? Ich habe diese einfache Klasse mit einigen statischen Methoden, und ich möchte sie testen.Ruby: Strange-String-Vergleich Assertion Verhalten

yaqueline/build/converters/asciidocconverter.rb

# encoding: UTF-8 
require 'asciidoctor' 

module Yaqueline 
    module Build 
    module Converters 

     class AsciiDocConverter < Converter 

     class << self 

      def matches path 
      path =~ /\.(asciidoc|adoc|ascii|ad)$/ 
      end 

      def convert content 
      html = Asciidoctor.convert content, to_file: false, safe: :safe 
       html = get_guts_out_of_body html 
       puts "asciidoC#{html}" 
       html 
      end 

      def get_guts_out_of_body html 
       if html =~ /<body>/ 
       puts "get guts: #{html}" 
       return html.match(%r{(?<=<body>).*(?=</body>)}) 
       end 
       html 
      end 

      end # class << self 

     end # class 

     end 
    end 
    end 

und der Test in test/build/converters/asciidocconverter_test.rb:

# encoding: utf-8 
require 'helper' 
require 'yaqueline/build/converters/asciidocconverter' 

class TestAsciidocConverter < Test::Unit::TestCase 

    should "be able to get body html from a document" do 
value = %q{SUCCESS} 
html = %Q{ 
    <html> 
     <head> 
    <title>Hej värld</title> 
     </head> 
     <body>#{value}</body> 
    </html>} 
guts = Yaqueline::Build::Converters::AsciiDocConverter.get_guts_out_of_body html 
puts "guts was '#{guts}'" 
assert value.eql?(guts), "guts was '#{guts}', expected '#{value}'" 
    end 

end 

Wenn Sie den Test mit

Lauf
$ rake test TEST=test/build/converters/asciidocconverter_test.rb 

Die Ergebnisse sieht mir gut:

Started 
get guts: 
    <html> 
     <head> 
    <title>Hej värld</title> 
     </head> 
     <body>SUCCESS</body> 
    </html> 
guts was 'SUCCESS' 
F 
=============================================================================================================================================================================== 
Failure: 
    guts was 'SUCCESS', expected 'SUCCESS'. 
    <false> is not true. 
test: AsciidocConverter should be able to get body html from a document. (TestAsciidocConverter) 
/Users/mats/src/examples/yaqueline/test/build/converters/asciidocconverter_test.rb:37:in `block in <class:TestAsciidocConverter>' 
/Users/mats/src/examples/yaqueline/test/build/converters/asciidocconverter_test.rb:39:in `instance_exec' 
/Users/mats/src/examples/yaqueline/test/build/converters/asciidocconverter_test.rb:39:in `block in create_test_from_should_hash' 
=============================================================================================================================================================================== 

aber die Behauptung scheitert, was mir seltsam erscheint und ich brauche Hilfe.

Ich bin mit ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin15] und meine Gemfile sieht aus wie

# Add dependencies required to use your gem here. 
# Example: 
# gem "activesupport", ">= 2.3.5" 

gem 'mercenary' 
gem 'safe_yaml' 
gem 'kramdown' 
gem 'colorator' 
gem 'pathutil' 
gem 'nokogiri' 
gem 'sass' 
gem 'listen', '~> 3.0' 
gem 'asciidoctor' 
gem 'tilt' 
gem 'erubis' 

# Add dependencies to develop your gem here. 
# Include everything needed to run rake, tests, features, etc. 
group :development do 
    gem "rdoc", "~> 3.12" 
    gem "bundler", "~> 1.0" 
    gem "juwelier", "~> 2.1.0" 
    gem "simplecov", ">= 0" 
    gem 'rubocop', '~> 0.48.1', require: false 
    gem 'thin' # or whatever I end up with 
    gem 'minitest' 
    gem 'test-unit' 
    gem 'shoulda' 
end 

Vielleicht bin ich mit Hut Test-Harnisch zu realisieren, das hilft.

Kann jemand den Fehler sehen oder erklären, was vor sich geht?

Prost

+0

Einrückungsfehler können in den SO-Editor eingefügt werden. Sie sind in Ordnung, IRL. – Mats

Antwort

2

Inspizieren die Arten von Werten, die verglichen werden. Einer von ihnen ist keine Schnur. (So ​​kann es nicht gleich einer Zeichenkette sein).

guts = html.match(%r{(?<=<body>).*(?=</body>)}) 
guts # => #<MatchData "SUCCESS"> 
guts.to_s # => "SUCCESS" 
+0

Natürlich. Vielen Dank. – Mats