我是单元测试的新手,我很想提高自己. 我有一个任务,在那里我需要生成标签(一个代码战争形).
如果字符串为空或有>;=140个字符,则需要返回FALSE. 如有必要,我将离开链接:https://www.codewars.com/kata/52449b062fb80683ec000024/train/ruby
def generateHashtag(str)
arr = str.split.map(&:capitalize)
arr.empty? || arr.join.length >= 140 ? false : '#' + arr.join
end
p generateHashtag(" Hello there thanks for trying my Kata") # "#HelloThereThanksForTryingMyKata"
p generateHashtag(" Hello World " ) # "#HelloWorld"
p generateHashtag("" ) # false
p generateHashtag('L' * 140) # false
代码可以工作,但我对正确编写RSpec测试很感兴趣. 我是这样写的:
require 'rspec'
require './codewars/5kyu/hashtagGenerator'
describe 'generate hashtag when string length is less that 140' do
before :each do
generateHashtag(" Hello there thanks for trying my Kata").length < 140
end
describe 'adds # to the start' do
it 'removes one space' do
expect(generateHashtag(" Hello there thanks for trying my Kata"))
.to eq("#HelloThereThanksForTryingMyKata")
end
it 'removes more than one space' do
expect(generateHashtag(" Hello World ")).to eq("#HelloWorld")
end
end
describe 'empty string' do
it 'returns false' do
expect(generateHashtag("")).to eq(false)
end
end
end
describe 'more than or equal to 140 characters' do
it 'returns false' do
expect(generateHashtag("L" * 140)).to be(false)
end
end
测试起作用了.但我想知道你的意见:这样可以吗?使用before
判断字符串的长度是否为<;140,这样做正确吗?有没有其他方法可以在每一块之前判断长度?抱歉,如果这个问题听起来很愚蠢的话.我可能是设计过头了: