使用ruby脚本的Rspec错误:"无法加载此类文件 - ./components/tasks.rb"(ruby app not rails)

E P*_*rre 0 ruby rspec

我正在尝试构建我的Rspec测试测试来测试我正在构建的ruby应用程序.我知道我应该先建立,但稍后进行测试.代码确实100%工作我只是在让Rspec查看我的代码时遇到问题.

github上的完整代码:https: //github.com/EsdrasEtrenne/tictactoe

到目前为止,我使用rspec运行的唯一文件是ruby/spec/game_spec.rb

game_spec.rb文件如下所示:

require_relative "../tictactoe"
Rspec.describe Tasks do
  before(:each)do
    @game = Tictactoe::Game.new
  end

  it "has a working method called play" do
    expect{@game.play}.to output("WELCOME! To the unbeatable Tic-tac-toe").to_stdout
  end
end
Run Code Online (Sandbox Code Playgroud)

它需要tictactoe作为亲戚:

require "./components/tasks.rb"
require "./components/board.rb"
require "./components/player.rb"
require "./components/player_types/computer.rb"
require "./components/player_types/human.rb"

module Tictactoe
  class Game
    attr_reader :board, :player, :opponent, :tasks

    def initialize
      @board = Board.new
      @tasks = Tasks.new
    end

    def play
      @tasks.greet_players
      @player, @opponent = @tasks.get_order
      current_player, current_opponent = @player, @opponent
      @tasks.print_board(@board)

      until @board.game_is_over || @board.tie
        @tasks.tell_turn(current_player)
        current_player.move(@board)
        @tasks.print_board(@board)
        if @board.game_is_over || @board.tie
          @tasks.game_over(@board)
          if @tasks.end_options
            game = Tictactoe::Game.new
            game.play
          end
        else
          current_player, current_opponent = current_opponent, current_player
        end
      end

    end

  end
end

game = Tictactoe::Game.new
game.play
Run Code Online (Sandbox Code Playgroud)

然后当我运行rspec game_spec.rb时出现此错误:

An error occurred while loading ./game_spec.rb.
Failure/Error: return gem_original_require(path)

LoadError:
  cannot load such file -- ./components/tasks.rb
# /Users/Esdras/Desktop/first_vagrant_box/coding_challenges/ruby/tictactoe.rb:1:in `<top (required)>'
# ./game_spec.rb:1:in `require_relative'
# ./game_spec.rb:1:in `<top (required)>'
No examples found.


Finished in 0.00028 seconds (files took 0.08732 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
Run Code Online (Sandbox Code Playgroud)

游戏定期100%运作.我正在寻找第一次测试通过,其余的应该是非常直接的.

max*_*ner 5

require路径根据解决你当你执行的代码是DIR.它实际上比这更复杂,并且存在可配置的"加载路径"的整个概念.请参阅默认情况下"需要"查找的路径是什么?

从这一行An error occurred while loading ./game_spec.rb.我搞清楚你跑cd spec那么rspec ./game_spec.rb或者类似的东西.我认为如果您在项目目录的根目录并运行,您的代码将会起作用rspec spec/game_spec.rb.

的好处require_relativerequire是路径可以解决无论你在哪里调用从脚本.我想如果你require_relative在tictactoe.rb中使用它会起作用.