RSPEC调用方法错误

埃德森

这是给出错误/故障的方法:

def draw?(board)
    if full?(board) == true && won?(board) == false
        return true
    else
        return false
    end
end

该方法可以完成所有应做的事情,但这是我运行rspec文件时出现的错误:

1) ./lib/tic_tac_toe.rb #draw? calls won? and full?                                                                                    
     Failure/Error: expect(self).to receive(:won?).with(board)                                                                           
       (#<RSpec::ExampleGroups::LibTicTacToeRb::Draw:0x00000002e300b0>).won?(["X", "O", "X", "O", "X", "X", "O", "X", "O"])              
           expected: 1 time with arguments: (["X", "O", "X", "O", "X", "X", "O", "X", "O"])                                              
           received: 0 times 

这是rspec测试:

describe '#draw?' do

    it 'calls won? and full?' do
      board = ["X", "O", "X", "O", "X", "X", "O", "X", "O"]
      expect(self).to receive(:won?).with(board)
      expect(self).to receive(:full?).with(board)

      draw?(board)
    end

本质上,我读:#draw?无法拨打#full?并赢得?

但是当我看我的#draw时?方法,我叫他们!作为“如果”的条件!

我要去哪里错了

非常感谢您的帮助!

我目前正在学习Ruby。

蟑螂

1)您的整个draw?方法可以简化为一行:full?(board) && !won?(board)

2)您需要expect监视类的实例,如果正在测试类方法,则需要监视类本身。您正在使用的self将是RSpec本身,而不是要测试的基础类。由于我不知道它的名字,所以我假设它叫Game尝试这样的事情:

describe '#draw?' do
  it 'calls draw? and full?' do
    board = ["X", "O", "X", "O", "X", "X", "O", "X", "O"]
    game = Game.new
    expect(game).to receive(:won?).with(board)
    expect(game).to receive(:full?).with(board)
    game.draw?
  end
end

3)这里的另一个问题是,您期望两种方法都可以被调用,但是won?如果full?return 则不会被调用false这是由于短路引起的在所有语句必须评估为true(或false)的情况下,一旦其中一个语句不为真,其余语句就不会被评估。考虑以下示例:if user != nil && user.admin?在此处短路,以便如果第一个语句不正确,则第二个语句不会得到评估。通常,不必要浪费资源来评估其输出无关紧要的语句。

4)最后,通常最好不要测试该函数的输出,而不是测试其工作原理的内部。最好进行一堆测试,在这些测试中您先传递数据,然后传递expect结果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rspec嘲笑调用.backtrace的错误?

来自分类Dev

rspec主题及其方法错误

来自分类常见问题

RSpec:如何测试方法是否被调用?

来自分类Dev

如何测试使用rspec调用的方法?

来自分类Dev

在rspec中存入接受块的方法调用

来自分类Dev

rspec测试是否调用了方法

来自分类Dev

无法从RSpec调用Ruby mixin实例方法

来自分类Dev

方法调用错误?

来自分类Dev

错误的方法调用异常

来自分类Dev

调用方法错误

来自分类Dev

错误调用方法

来自分类Dev

错误的方法调用异常

来自分类Dev

RSpec:引发错误的预期方法失败

来自分类Dev

Rspec未定义方法“匹配?” 错误

来自分类Dev

Rspec:如何测试引发错误的方法

来自分类Dev

在:format =>:json方法上的rspec MissingTemplate错误

来自分类Dev

错误-RSpec-Expect方法转义了'\ n'

来自分类Dev

调用方法的错误做法?

来自分类Dev

如何在rspec中调用模块方法,并设置当前模块

来自分类Dev

测试RSpec中某个输入是否调用了存根方法

来自分类Dev

使用RSpec测试依赖于外部Cassandra调用的方法

来自分类Dev

Rspec控制器使用链接方法调用进行测试

来自分类Dev

使用RSpec测试依赖于外部Cassandra调用的方法

来自分类Dev

如何在rspec中调用模块方法,并设置当前模块

来自分类Dev

测试RSpec中某个输入是否调用了存根方法

来自分类Dev

如何在rspec中测试方法调用的顺序?

来自分类Dev

RSPEC测试名称错误-未定义的本地变量或方法

来自分类Dev

RSpec无法运行--bisect,并出现错误:#<RSpec :: Core :: Bisect :: Server>的未定义方法`run'

来自分类Dev

调用RSpec睡眠