Trình tạo giả sẽ không thực hiện bất kỳ mã hóa nào cho bạn. Nó sẽ chỉ cung cấp cho bạn một chuỗi như O'Malley
. Nhưng phản hồi phải có HTML thoát (hoặc một số loại khác, tùy thuộc vào định dạng), như O'Malley
. Bạn luôn có thể puts response.body
để xem chắc chắn.
Bộ kết hợp RSpec matches
được thiết kế thực sự for either expected
or actual
to be a regular expression, nhưng trong trường hợp của bạn cả hai đều là chuỗi. Bởi vì mã số has an optimization calling values_match?
mà does a simple comparison, bạn đang nói một cách hiệu quả expect(response.body).to eq(@thing.name)
.
Nếu bạn muốn có cụm từ thông dụng, bạn phải cẩn thận khi sử dụng các giá trị không được kiểm soát để tạo ra nó. May mắn thay Ruby có Regexp.escape
cho điều đó, vì vậy bạn có thể nói Regexp.new("foo" + Regexp.escape(@thing.name) + "bar")
. Nhưng từ phản đối của bạn đến include
, có vẻ như bạn thực sự muốn phản hồi không chứa gì ngoài tên, phải không? Trong trường hợp đó, bạn không cần một regex nào cả.
Trong mọi trường hợp, sự cố không phải là về những gì xung quanh tên nhưng cách thoát tên. Vì vậy, trước khi so sánh bạn nên (1) giải mã phản hồi hoặc (2) mã hóa chuỗi kẻ giả mạo. Nó không thực sự quan trọng. Cả hai đều khá dễ dàng:
expect(CGI.unescapeHTML(response.body)).to eq @thing.name
hoặc
expect(response.body).to eq CGI.escapeHTML(@thing.name)
Đương nhiên, nếu câu trả lời của bạn là JSON, bạn nên thay thế tất cả HTML này thoát thứ với JSON vv
Nguồn
2017-01-30 20:35:58
Tôi tò mò vì sao bạn cảm thấy câu trả lời của tôi không đủ. Bất cứ điều gì tôi có thể làm rõ? –
Vấn đề với bao gồm là nếu nó "chứa" nó, tôi muốn nó để phù hợp với nó hoàn toàn và không chỉ là từ "tồn tại" trong tên. Mặc dù tôi có thể sử dụng nó như là một dự phòng, trong đó bệnh đánh dấu câu trả lời của bạn chính xác :). Im thực sự chỉ cố gắng tìm kiếm các khả năng khác. – msmith1114