2017-07-21 36 views
0

我正在为我的后端作业编写一些测试,我遇到了一个奇怪的问题,rspec没有找到我的方法。Rspec没有找到类方法

我写了一个简单的类&测试来说明这个问题:

应用程序/相互作用蛋白/ tmp_test.rb:

class TmpTest 
    def call 
    a = 10 
    b = 5 
    b.substract_two 
    return a + b 
    end 

    def substract_two 
    c = self - 2 
    return c 
    end 
end 

规格/相互作用蛋白/ tmp_test.rb:

require 'rails_helper' 

describe TmpTest do 
    context 'when doing the substraction' do 
    it 'return the correct number' do 
     expect(described_class.call).to eq(13) 
    end 
    end 
end 

输出:

TmpTest 
    when doing the substraction 
    return the correct number (FAILED - 1) 

Failures: 

    1) TmpTest when doing the substraction return the correct number 
    Failure/Error: expect(described_class.call).to eq(13) 

    NoMethodError: 
     undefined method `call' for TmpTest:Class 
    # ./spec/interactors/tmp_test.rb:6:in `block (3 levels) in <top (required)>' 

Finished in 0.00177 seconds (files took 1.93 seconds to load) 
1 example, 1 failure 

Failed examples: 

rspec ./spec/interactors/tmp_test.rb:5 # TmpTest when doing the substraction return the correct number 
+1

请停止编辑原始问题并恢复更改。 – mudasobwa

回答

1

这不是一个类方法,它是一个实例方法。你的测试应该是这样的:

describe TmpTest do 
    subject(:instance) { described_class.new } 

    context 'when doing the subtraction' do 
    it 'returns the correct number' do 
     expect(instance.call).to eq(13) 
    end 
    end 
end 
+0

感谢您指出我在类和实例方法之间的混淆,但第二种方法仍然存在问题,我将编辑我的原始文章。 –

+0

这很酷,但你错过了一只大象寻找苍蝇:) – mudasobwa

+0

@mudasobwa:'b.subtract_two'?不要错过它。这是超出了问题的范围:) –

0

这是一个完整的混乱。修正版本注释:

class TmpTest 
    def call 
    a = 10 
    b = 5 
    # b.substract_two # why do you call method of this class on b?! 
    a + subtract_two(b) 
    end 

    def substract_two(from) 
    from - 2 
    end 
end 

另外:不要在方法的最后一行用return

+0

确实我的代码质量很差,我只是急着写说明问题, 我现在可以看到,我的问题是在错误的元素(b)上调用类方法(substract_two) 随着您的版本的工作。 –

+0

你应该接受塞尔吉奥的回答,而不是我的,因为他解决了你所问的问题。 – mudasobwa

+0

我的“真实”问题(这里的代码模仿了我的应用程序中的代码)实际上与调用错误元素的类方法相关联,所以您的答案确实对我的用例来说确实很好。 –