레일스에서 작성한 XML 파서의 출력에 대한 테스트를 실행 중입니다. RSpec을 실행하면 실패하고 "예상 한"것과 "있는 것"이 표시되고 내용은 동일합니다.RSpec - 비교에 실패한 동일한 문자열
저는 eq, eql, equal 및 match를 사용해 보았지만 아무도 작동하지 않았습니다.
테스트 :
expect(sql).to eql("INSERT INTO users (id, first_name, last_name, city, street_address, country, postcode, company, email, username, phone_number, created_at, updated_at) VALUES (1, 'Dewayne', 'Dare', 'Rippinfort', '1171 Lucas Place', 'Malaysia', '94876-5561', 'Kiehn LLC', '[email protected]', 'kay_armstrong', '652.488.7428', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);\n")
출력을 생성하는 파서의 일부 :
@sql << "INSERT INTO users (id, first_name, last_name, city, street_address, country, postcode, company, email, username, phone_number, created_at, updated_at) VALUES (" +
"#{self.last_user[:id]}, " +
"'#{clean(self.last_user[:first_name])}', " +
"'#{clean(self.last_user[:last_name])}', " +
"'#{clean(self.last_user[:city])}', " +
"'#{clean(self.last_user[:street_address])}', " +
"'#{clean(self.last_user[:country])}', " +
"'#{clean(self.last_user[:postcode])}', " +
"'#{clean(self.last_user[:company])}', " +
"'#{clean(self.last_user[:email])}', " +
"'#{clean(self.last_user[:username])}', " +
"'#{clean(self.last_user[:phone_number])}', " +
"CURRENT_TIMESTAMP, " +
"CURRENT_TIMESTAMP" +
");\n"
실패한 테스트 : 문제는 내 코드가 인쇄이었다 것을
1) UserImporter with real data creates an SQL file ready to import the article
Failure/Error: expect(sql).to eql("INSERT INTO users (id, first_name, last_name, city, street_address, country, postcode, company, email, username, phone_number, created_at, updated_at) VALUES (1, 'Dewayne', 'Dare', 'Rippinfort', '1171 Lucas Place', 'Malaysia', '94876-5561', 'Kiehn LLC', '[email protected]', 'kay_armstrong', '652.488.7428', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);\n")
expected: "INSERT INTO users (id, first_name, last_name, city, street_address, country, postcode, company, emai...C', '[email protected]', 'kay_armstrong', '652.488.7428', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);\n"
got: "INSERT INTO users (id, first_name, last_name, city, street_address, country, postcode, company, emai...C', '[email protected]', 'kay_armstrong', '652.488.7428', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);\n"
(compared using eql?)
Diff:
@@ -1,2 +1,3 @@
INSERT INTO users (id, first_name, last_name, city, street_address, country, postcode, company, email, username, phone_number, created_at, updated_at) VALUES (1, 'Dewayne', 'Dare', 'Rippinfort', '1171 Lucas Place', 'Malaysia', '94876-5561', 'Kiehn LLC', '[email protected]', 'kay_armstrong', '652.488.7428', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
+INSERT INTO users (id, first_name, last_name, city, street_address, country, postcode, company, email, username, phone_number, created_at, updated_at) VALUES (1, 'Dewayne', 'Dare', 'Rippinfort', '1171 Lucas Place', 'Malaysia', '94876-5561', 'Kiehn LLC', '[email protected]', 'kay_armstrong', '652.488.7428', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
문자열의 인코딩이 다를 수 있습니까? 예를 들어, 하나는 UTF-8이고 다른 하나는 ASCII 일 수 있습니다. 두 문자열 모두에서'encoding'을 호출하고 반환 값을 비교하여이를 확인할 수 있습니다. – spickermann
diff 출력은 새로운 파일 (+)에서 라인 1부터 시작하여 3 개의 라인이 있고, 이전 파일 (-)에서는 라인 1에서 시작하여 2 개의 라인이 있고 예상되는 곳은 이전 파일 , 실제는 새 파일입니다. got : 행 다음에 빈 줄이 생겼을 것입니다. (eql과 비교했을 때 빈 줄을 보셨습니까?) – 7stud
@ 7stud 감사합니다. 귀하의 의견에 감사 드리며, 그 숫자의 의미를 알지 못했습니다. 안타깝게도 내 코드에서 두 번 라인을 인쇄하는 바보 같은 실수였습니다! 내 말에 아무 것도 흥미롭지 않았습니다. 건배 –