2014-09-22 46 views
1

我试图测试这种方法,该方法可以只是把整数作为参数,但我不能使它的工作;不幸。 感谢你的时间。 我不理解这一错误日志:使用kind_of?与红宝石Rspec

1)DownloadingData interval_data需要2个整数作为参数来设置的时间间隔 故障/错误:bag.should_receive(:interval_data)。随着(2,kind_of(数字) (#),kind_of?(Numeric),2) (#)。interval_data(2,#,false,2) 预计:1次带参数:(2,#,false,2) 收到0次带参数:(2,#,假的,2)

我的代码:

class DownloadingData 

    attr_accessor :today 

    def initialize 
    @today = Date.today 
    end 

    def interval_data(point_a, point_b) 
    start_point = @today - point_a 
    end_point = @today + point_b 
    (start_point..end_point).each do |week_day| 
     puts week_day #checking the week day 
    end 
    end 
end 

我的测试:

describe DownloadingData do 
    let(:bag) { DownloadingData.new } 

    describe 'interval_data' do 
    it 'responds to interval_data' do 
     expect(bag).to respond_to(:interval_data) 
    end 
    it 'takes 2 integers as parameters to set up the time-interval' do 
     bag.should_receive(:interval_data).with(2, kind_of(Numeric), kind_of?(Numeric), 2) 
    end 
end 
+0

你可能不想在这里使用should_receive。而是调用方法并指定返回值应该是什么(或者应该发生什么样的副作用) – 2014-09-22 16:44:20

回答

0

首先你必须在statintg之后实际使用它应该被接收的方法,否则它将不被接收。 receive检查方法是否实际与存根共同使用。这就是为什么他说他收到0次。 RSPEC expect message

在这里你可以看到如何使用可用于:matching arguments

试试这个:

it 'takes 2 integers as parameters to set up the time-interval' do 
    expect(bag).to receive(:interval_data).with(kind_of(Numeric), kind_of(Numeric)).and_call_original 
    bag.interval_data(1, 2) 
end 

虽然这只会验证调用你的方法有2个Numerics的,不会造成异常。

+0

尽管该规范并没有真正执行任何操作 – 2014-09-22 16:41:06

+0

但它验证了interval_data方法运行时没有2个数字的错误。没有必要像那样测试它,但那是要求的。 – dfherr 2014-09-22 17:00:43

+0

@ascar你好!感谢您的回复!你说:“没有必要像那样测试它”那么它将如何测试呢?谢谢! – YoniGeek 2014-09-22 17:11:18