У меня проблемы с запуском тестов rspe c. Я делаю приложение, которое создает Gist, используя Github API, у меня есть тестовый пример в rspe c, который проверяет, был ли Gist создан путем симуляции запроса к API. Однако мои тесты rspe c не имитируют, а вместо этого запускают мою программу нормально. Например, если я запускаю $ ruby git_clases.rb , я получаю тот же результат.
Моя структура выглядит следующим образом:
├── Gemfile
├── Gemfile.lock
├── git_clases.rb
└── spec
├── git_clases_spec.rb
└── spec_helper.rb
git_clases.rb:
require 'net/http'
require 'json'
require 'uri'
require 'dotenv/load'
require 'rspec'
class Gist
attr_reader :response_status
attr_reader :try_again
def initialize(filename, description, state, content)
@filename = filename
@description = description
@state = state
@content = content
end
def post(uri, request)
request.basic_auth(ENV['YOUR_USERNAME'], ENV['YOUR_TOKEN'])
request.body = JSON.dump({"description" => @description,"public" => @state,"files" => {@filename => {"content" => @content}}})
req_options = { use_ssl: uri.scheme == "https" }
begin
response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end
json = response.body
parsed = JSON.parse(json)
@response_status = response.code
if @response_status == "201"
puts "Your gist has been created successfully. The URL of your gist is: "+ parsed["url"]
end
rescue SocketError => se
puts "A connection error has occurred. Want to try again?"
@try_again = gets.chomp.capitalize
end
end
end
loop do
puts "Filename?"
filename = gets.chomp
if File.exist?(filename)
puts "Description?"
description = gets.chomp
puts "Public or Private?"
state = gets.chomp.capitalize
if state == "Yes"
state = true;
elsif state == "No"
state = false;
else
puts "Yes or no..."
end
open(filename, "r") { |file| @content_file = file.read() }
content = @content_file
GITHUB_URL = "https://api.github.com/gists"
uri = URI.parse(GITHUB_URL)
request = Net::HTTP::Post.new(uri)
gist = Gist.new(filename,description,state,content)
gist.post(uri, request)
break if gist.response_status == "201"
break if gist.try_again == "No"
else
puts "Your file does not exist"
puts "Do you want try again?"
continue = gets.chomp.capitalize
break if continue == "No"
end
end
spec / git_clases_spe c:
require_relative '../git_clases.rb'
RSpec.describe Gist do
describe "#post" do
it "crear gist" do
filename = "test.txt"
description = "descripción"
state = true
content = "contenido"
gist = described_class.new(filename, description, state, content)
uri = URI.parse("https://api.github.com/gists")
request = Net::HTTP::Post.new(uri)
gist.post(uri, request)
expect(gist.response_status).to eq 201
end
end
end
$ rspe c вывод:
Filename?
Я думаю, что rspe c не должна запускать мою программу при запуске команда "rspe c"
Есть идеи? Спасибо тебе