2017-02-04 11 views
1

これに対する回答が見つからないようです。Travis-CI GoLang例テストエラー

GoLangパッケージのテストをビルド/実行するためにTravis-CIを使用しようとしています。しかし、Travisは、テストの一部として実行されているGoLangの例では失敗を続けています。

例えば、ここでは1例です:

func Example() { 
    now := time.Date(2017, time.February, 1, 7, 51, 0, 0, time.Local) 

    // instantiate a new Podcast 
    p := podcast.New(
     "Sample Podcasts", 
     "http://example.com/", 
     "An example Podcast", 
     &now, &now, 
    ) 

    // add some channel properties 
    p.ISubtitle = "A simple Podcast" 
    p.AddImage("http://example.com/podcast.jpg") 
    p.AddAuthor("Jane Doe", "[email protected]") 

    for i := int64(0); i < 2; i++ { 
     n := strconv.FormatInt(i, 10) 

     // create an Item 
     item := podcast.Item{ 
      Title:  "Episode " + n, 
      Description: "Description for Episode " + n, 
      ISubtitle: "A simple episode " + n, 
      PubDate:  &now, 
     } 
     // add a Download to the Item 
     item.AddEnclosure("http://example.com/"+n+".mp3", podcast.MP3, 55*(i+1)) 

     // add the Item and check for validation errors 
     if _, err := p.AddItem(item); err != nil { 
      os.Stderr.WriteString("item validation error: " + err.Error()) 
     } 
    } 

    // Podcast.Encode writes to an io.Writer 
    if err := p.Encode(os.Stdout); err != nil { 
     os.Stderr.WriteString("error writing to stdout: " + err.Error()) 
    } 

    // Output: 
    // <?xml version="1.0" encoding="UTF-8"?> 
    // <rss version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"> 
    // <channel> 
    //  <title>Sample Podcasts</title> 
    //  <link>http://example.com/</link> 
    //  <description>An example Podcast</description> 
    //  <generator>go podcast v1.0.0 (github.com/eduncan911/podcast)</generator> 
    //  <language>en-us</language> 
    //  <lastBuildDate>Wed, 01 Feb 2017 07:51:00 -0500</lastBuildDate> 
    //  <managingEditor>[email protected] (Jane Doe)</managingEditor> 
    //  <pubDate>Wed, 01 Feb 2017 07:51:00 -0500</pubDate> 
    //  <image> 
    //  <url>http://example.com/podcast.jpg</url> 
    //  </image> 
    //  <itunes:author>[email protected] (Jane Doe)</itunes:author> 
    //  <itunes:subtitle>A simple Podcast</itunes:subtitle> 
    //  <itunes:image href="http://example.com/podcast.jpg"></itunes:image> 
    //  <item> 
    //  <guid>http://example.com/0.mp3</guid> 
    //  <title>Episode 0</title> 
    //  <link>http://example.com/0.mp3</link> 
    //  <description>Description for Episode 0</description> 
    //  <pubDate>Wed, 01 Feb 2017 07:51:00 -0500</pubDate> 
    //  <enclosure url="http://example.com/0.mp3" length="55" type="audio/mpeg"></enclosure> 
    //  <itunes:author>[email protected] (Jane Doe)</itunes:author> 
    //  <itunes:subtitle>A simple episode 0</itunes:subtitle> 
    //  <itunes:image href="http://example.com/podcast.jpg"></itunes:image> 
    //  <itunes:duration>55</itunes:duration> 
    //  </item> 
    //  <item> 
    //  <guid>http://example.com/1.mp3</guid> 
    //  <title>Episode 1</title> 
    //  <link>http://example.com/1.mp3</link> 
    //  <description>Description for Episode 1</description> 
    //  <pubDate>Wed, 01 Feb 2017 07:51:00 -0500</pubDate> 
    //  <enclosure url="http://example.com/1.mp3" length="110" type="audio/mpeg"></enclosure> 
    //  <itunes:author>[email protected] (Jane Doe)</itunes:author> 
    //  <itunes:subtitle>A simple episode 1</itunes:subtitle> 
    //  <itunes:image href="http://example.com/podcast.jpg"></itunes:image> 
    //  <itunes:duration>110</itunes:duration> 
    //  </item> 
    // </channel> 
    // </rss> 
} 

ここでは、ローカルで実行されるにもかかわらず、go testを失敗した特定のトラヴィスビルドへのリンクです:

https://travis-ci.org/eduncan911/podcast/builds/198093154

$ go test -covermode count -coverprofile cover.out 
--- FAIL: Example (0.00s) 
got: 
<?xml version="1.0" encoding="UTF-8"?> 
...(omitted) 

want: 
<?xml version="1.0" encoding="UTF-8"?> 
...(omitted) 

go testコマンドは、通常はmacOS、Windows 10 VM、EC2 Ubuntuインスタンスでローカルに動作します。

例はgo testを実行することができないトラビスだけです。

私は例をスキップした場合、テストはして合格:

$ go test -run Test -covermode count -coverprofile cover.out 

しかし、それは目的の敗北:例

  • を検証

    1. は97%からコードカバレッジレポートを削除43%まで

    (はい、コードカバレッジの一部として例を使用 - ブログの一部p私は書いてみたいと思い、Travisを使ってそれを見せています。しかし、ああ、おっと!トラヴィス・エラー!)

    は、私は結果を見てからgo testを防ぐことができ、コンソール/ログに出力をリダイレクトし、トラヴィスはstderrおよび/またはstdoutとファンキーな何かをやっている疑いがあります。

  • 答えて

    3

    トラビスで得られた値と必要な値は同一ではありません。これらはタイムゾーンオフセットによって異なります。

    time.Localは、ローカルマシンでは-0500、トラビスでは+0000です。 time.UTCまたはコードが実行されているシステムとは独立した別の場所を使用してください:

    now := time.Date(2017, time.February, 1, 7, 51, 0, 0, time.UTC) 
    
    +0

    omg、それは私でした!それは私が子供と真夜中にコーディングするために得るものです。ありがとう! – eduncan911

    関連する問題