RSpec它用变量名阻塞

时间:2015-06-24 04:23:05

标签: unit-testing rspec

我有一个函数get_type,返回给定int:

的字符串
def get_type(integer)
    types = [...]
    return types[integer]
end

使用RSpec进行测试时,我尝试执行以下操作:

describe 'function' do
    context 'on valid input'
        let(:input){ 2 }
        let(:type){ 'large' }
        let(:result){ get_type input }
        it{ expect(result).to eq(type) }
    end
end

但是,这会给出消息:

function on valid input should eq "large"

没有提及输入,因此听起来像函数应该总是返回"large"

如何更改此消息以表示:

function on valid input should eq type

或其他有意义的消息?我可以命名it块:

it 'should have the correct type' do
    expect(result).to eq(type)
end

但有没有一种更好的方法可以做到这一点,而基本上没有输入两次测试?

1 个答案:

答案 0 :(得分:0)

我认为无益的信息应该被认为是一种气味 - 你正走在一条道路上,每一道测试只有expect(result).to eq(expected),墙壁为let。在我看来,这是过度使用let - 我认为你没有获得任何东西

describe 'function' do
   context 'on valid input' do
     it{ expect(get_type(2)).to eq('large') }
   end
end

哪会产生更有帮助的失败信息。当表达式更复杂或者我可以给它们一个更好的名称时(例如名为let的属性哈希),我会保留valid_attributes