我正在尝试使用'youtube-dl'测试从youtube下载的小宝石。
我想测试命令youtube-dl [url] --get-title
的输出,但我不知道我是怎么做的。
这是我的代码:
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
这是我的考验:
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
当我运行测试时,我收到此错误:
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
我该怎么做?
答案 0 :(得分:2)
好像你的测试没问题,而且实现失败了(所以,测试报告失败是可以的)
在实现上,不使用 system 方法(根据命令的返回代码返回true / false),而是使用backtick(使用命令的输出返回字符串)
def get_title
`#{YT_DL} --get-file #{get_url}`
end
另外,作为附加说明,依赖于外部命令(从单元测试的角度来看)不利于您的实现,也许您想要模拟外部系统命令执行(或者不是,您可能知道什么策略更适合于你的具体情况)