首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rspec测试命令行输出

使用rspec测试命令行输出
EN

Stack Overflow用户
提问于 2014-09-17 03:09:43
回答 1查看 83关注 0票数 0

我正在尝试测试一个可以使用' youtube -dl‘从youtube下载的小gem。

我想测试命令youtube-dl [url] --get-title的输出,但我不知道如何做到这一点。

这是我的代码:

代码语言:javascript
复制
module Youruby
  class Youtube
    YT_DL = File.join(File.expand_path(File.dirname(__FILE__)), "../bin/youtube-dl")
    def initialize(id)
      @id = id
    end

    def get_title
      system(YT_DL, '--get-title', get_url)
    end
 end
end

这是我的测试:

代码语言:javascript
复制
require "spec_helper"
require "youruby"

describe Youruby do

  it "get video title" do
    video = Youruby::Youtube.new('uaEJvYWc2ag')
    video.get_title.should == "FFmpeg-slowmotion.1"
  end
end

当我运行测试时,我得到这个错误:

代码语言:javascript
复制
Failure/Error: video.get_title.should == "FFmpeg-slowmotion.1"
   expected: "FFmpeg-slowmotion.1"
        got: true (using ==)
   Diff:
   @@ -1,2 +1,2 @@
   -"FFmpeg-slowmotion.1"
   +true

我该怎么做?

EN

回答 1

Stack Overflow用户

发布于 2014-09-17 03:21:46

看起来您的测试是正常的,并且实现正在失败(所以,测试报告失败是可以的)

在实现上,不使用system方法(根据命令的返回代码返回true/false ),而使用backtick (使用命令的输出返回字符串)

代码语言:javascript
复制
def get_title 
  `#{YT_DL} --get-file #{get_url}`
end

作为补充说明,ALso不利于您的实现依赖于外部命令(从单元测试的角度来看),也许您想模拟外部系统命令的执行(或者不是,您可能知道哪种策略更适合您的特定情况)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25876608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档