레일스 앱에서 문자열의 단어가 아닌 문자를 제거하려면 gsub
을 사용하려고했습니다. 나는 다음과 같은 코드를 사용 :gssub와의 괴도
somestring.gsub(/[\W]/i, '') #=> ""
을하지만 실제로는 잘못된 것입니다, 그것은뿐만 아니라 편지 k
을 제거합니다.
somestring.gsub(/\W/i, '') #=> "kkk"
하지만 내 문제는 RSpec에 작동하지 않는 사용하여 위의 코드를 포함하는 레일 컨트롤러의 단위 테스트는 단위 테스트가 실제로 전달하는 것입니다 : 올바른 일을해야한다. 그래서 나는 RSpec에
it "test this gsub" do
'kkk'.gsub(/[\W]/i, '').should == 'kkk'
end
위의 테스트 케이스가 실패 할 경우에 매우 극단적 인 테스트 케이스를 만들었지 만 실제로 전달합니다. 여기에 어떤 문제가 있습니까? 왜 시험은 통과할까요?
왜 테스트가 실패합니까? '/ [\ W]/i'는 제가 볼 수있는 한 그 작업을위한 완전히 유효한 정규 표현식입니다. 이 경우 대괄호는 불필요하지만 아무런 상처를주지는 않습니다. –
실제로 irb에서 정규 표현식을 사용해 보셨습니까? ''kkk ''.gsub (..)'그것은 잘 작동하고 결과는 "kkk"이므로 테스트가 통과됩니다. 기대하고있는 결과는 무엇입니까? – Casper
@Casper 실제로''kkk'.gsub (/ [\ W]/i, '')'를 실행하면''''이됩니다. 비교해 보면''kkk '.gsub (/ \ W/i,' ')'를 실행하면''kkk''가 반환됩니다. –