2014-09-16 3 views
0

Я пытаюсь протестировать небольшой камень, который делает загрузки с youtube с помощью «youtube-dl».Тестирование выхода comand-line с использованием rspec

Я хочу проверить выход из команды 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 

Как сделать что?

ответ

1

Похоже ваш тест ОК, а реализация не удается (так, хорошо для теста, чтобы сообщить потерпеть неудачу)

О реализации, вместо использования системы метод (который возвращает истину/ложь по возвращаемый код команды), использовать обратные одиночные кавычки (который возвращает строку с выводом команды)

def get_title 
    `#{YT_DL} --get-file #{get_url}` 
end 

Кроме того, в качестве дополнительной записке, это не хорошо для вашей реализации будет зависеть от внешних команд (от блока с точки зрения тестирования), возможно, вы хотите издеваться над внешними системными командами n (или нет, вы, возможно, знаете, какая стратегия лучше для вашего конкретного случая)

+0

спасибо, есть какой-либо способ издеваться над этим? –

Смежные вопросы