2016-07-31 2 views
0

레일스에서 ​​작성한 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); 
+0

문자열의 인코딩이 다를 수 있습니까? 예를 들어, 하나는 UTF-8이고 다른 하나는 ASCII 일 수 있습니다. 두 문자열 모두에서'encoding'을 호출하고 반환 값을 비교하여이를 확인할 수 있습니다. – spickermann

+2

diff 출력은 새로운 파일 (+)에서 라인 1부터 시작하여 3 개의 라인이 있고, 이전 파일 (-)에서는 라인 1에서 시작하여 2 개의 라인이 있고 예상되는 곳은 이전 파일 , 실제는 새 파일입니다. got : 행 다음에 빈 줄이 생겼을 것입니다. (eql과 비교했을 때 빈 줄을 보셨습니까?) – 7stud

+0

@ 7stud 감사합니다. 귀하의 의견에 감사 드리며, 그 숫자의 의미를 알지 못했습니다. 안타깝게도 내 코드에서 두 번 라인을 인쇄하는 바보 같은 실수였습니다! 내 말에 아무 것도 흥미롭지 않았습니다. 건배 –

답변

0

라인 아웃 두 번. 나는 7stud에 대한 감사의 실수를 발견했다 :

@@ ... @@ 다음에 두 개의 INSERT 행이 표시됩니까? 첫 번째 문자는 공백으로 시작됩니다 (즉, a 또는 a +가 아닙니다). 이는 두 파일 모두에 선이 있음을 의미합니다. 다음 줄은 +로 시작합니다. 즉, 새 파일에는 추가 행이 있습니다. 즉, 새 파일에는 두 개의 INSERT 행이 있고, 이전 파일에는 INSERT 행이 하나 있습니다. 그리고 이전에 언급 한 바와 같이 새 파일은 실제 파일이고 이전 파일은 예상 된 파일입니다. (라인이 -로 시작하면 이전 파일에는 해당 라인이 있지만 새로운 파일은 그렇지 않습니다.)