Rspe c не имитирует запрос - PullRequest
0 голосов
/ 26 февраля 2020

У меня проблемы с запуском тестов 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"

Есть идеи? Спасибо тебе

...