我只有几天学习rspec,我正在尝试在包含类的程序中编写我的第一个测试。我知道这个测试是错误的,但我不知道如何修复它因为我没有失败。相反,它只是开始运行我的程序(一个简单的tic tac toe游戏)。为简洁起见,我省略了tic tac toe游戏的代码。任何指导将不胜感激。谢谢!
require "tictactoe"
describe Game do
describe "#players" do
it "displays player names" do
player1 = "Harry"
expect(Game.new("Harry", "Nick").players).to eq(player1)
end
end
end
答案 0 :(得分:2)
正如我们在上面的评论中发现的那样,问题是tictactoe.rb
具有运行整个程序的代码,因此require "tictactoe"
也会运行整个程序。
有两种解决方案。
第一种方法是将tictactoe.rb
更改为仅执行导致整个程序在从命令行执行脚本时运行的代码,而不是从另一个执行require
d时执行脚本。这是Ruby中常见的习语:
# declare your classes up here
class Game
# ...
end
# etc...
# down here run the program only if this
# script is run from the command line
if __FILE__ == $0
game = Game.new
# ...and so on...
end
现在,您可以在测试中require "tictactoe"
知道if
区块中的代码无法执行。
第二个解决方案是将您的类声明移动到其他文件中,例如将Game类放在game.rb
中并让tictactoe.rb
执行require "game"
,并使用测试Game类的RSpec代码执行相同操作。
随着程序变大,后一种方法更易于维护。如果你看一下像Bundler这样的大型宝石,你会发现"程序"文件,bundle
只有几行代码 - 所有它都是require
其他能够完成实际工作的代码。
但是,如果您的计划规模很小,并且您预计短期内它会增长很多,那么前一种方法也很好。
答案 1 :(得分:0)
试试这个。首先,$noofsongs = "select * from songs_list";
$query8 = mysqli_query($con, $noofsongs);
$noio = mysqli_num_rows($query8);
$flag = 0;
if(isset($_POST['deletethis'])){
for($j=0; $j<=$noio ;$j++){
if (isset($_POST['<?php echo"cb".$j;?>'])){
$deletesongsquery = "DELETE FROM `songs_list` WHERE `sno.` = $j" ;
$query4 = mysqli_query($con, $deletesongsquery);
$flag = $flag + 1;
}
}
echo $flag;
}
位于文件顶部。
require rspec
然后确保使用require "tictactoe"
require "rspec"
RSpec.describe Game do
describe "#players" do
it "displays player names" do
player1 = "Harry"
expect(Game.new("Harry", "Nick").players).to eq(player1)
end
end
end
NOT rspec
所以
ruby