2016-04-07 12 views
1

RSpec örneği, eşleşme argümanında (Faker tarafından oluşturulan) arada sırada tek bir alıntı olduğunda başarısız olur.RSpec `match` failes

Teknik örneğin kendisi: bir çıkış

it 'contains organizer name' do 
    expect(mail.body.encoded).to match organizer.name 
end 

Örnek:

1) PriorityRequestMailer#prioritize body contains organizer name 
Failure/Error: expect(mail.body.encoded).to match organizer.name 
    expected "<html>...<a href=\"http://zieme-streich_905/events\">Gage O'Reilly</a>...</html>\r\n" to match "Gage O'Reilly" 
    Diff: 
    @@ -1,2 +1,66 @@ 
    -Gage O'Reilly 
    +<html> 
    .... 

Bu verilen isim Gage O'Reilly vücutta mevcut olan ama yine de başarısız olduğunu görünüyor. Böyle bir sorunun sebebi nedir?

cevap

2

Belkide öyle mi?

expect(mail.body.encoded).to include organiser.name 
0
expect(mail.body).to match(/"#{organiser.name}"/) 

Ya

"Gage O'Reilly" olarak senin durumunda böyle expect("a string").to match(/str/)

match kullanmak sizin durumunuzda için <html>....Gage O'Reilly...</html> "dizesi

ile uyumlu olmalıdır eğer

expect(mail.body).to match(organiser.name) 

Geçecektir

> "<html>...<a href=\"http://zieme-streich_905/events\">Gage O'Reilly</a>...</html>\r\n".match(/Gage O'Reilly/) 
=> #<MatchData "Gage O'Reilly"> 

Daha here

+1

'match', zaten bir –

+0

değilse bile argümanını Regex'e dönüştürüyor @FrederickCheung adlı kişiyi düzenle my answer just –

3

Genellikle encoded eşleştirilecek istemiyoruz. Aslında bu yöntem için docs

bu doğrudan iyi bir fikir değildir çağrılması demek, ancak kodlanmış farklı bir kodlamada olabilir

A vb alıntılanan-yazdırılabilir dönüştürülen

uyumluluk için desteklenir Daha iyi bir fikir, decoded ile eşleşmektir. Vücut nesne zaten doğru olanı yapan bir match yöntemi olduğundan da iyisi,

expect(mail.body).to match(...) 

yapabilirsiniz.