【发布时间】:2016-12-05 19:13:51
【问题描述】:
我正在对我在 Rails 中编写的 XML 解析器的输出运行测试。当我运行 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', 'turner@schmidt.biz', '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', 'turner@schmidt.biz', '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', 'turner@schmidt.biz', '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', 'turner@schmidt.biz', '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', 'turner@schmidt.biz', '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', 'turner@schmidt.biz', 'kay_armstrong', '652.488.7428', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
【问题讨论】:
-
字符串有可能有不同的编码吗?例如,一个可能是 UTF-8,另一个可能是 ASCII。您可以通过在两个字符串上调用
encoding并比较返回值来检查。 -
diff 输出表明在新文件(+)中,从第 1 行开始,有 3 行,而在旧文件(-)中,从第 1 行开始,有 2 行,其中预期是旧文件,实际是新文件。 got: 行之后可能有一个空行(见
(compared using eql?)之前的空行? -
@7stud 谢谢,您的评论帮助我弄清楚了,我不知道这些数字的含义。不幸的是,这是我的代码中的一个愚蠢的错误,它两次打印了该行,所以我没有什么有趣的事情要注意!干杯
-
@DannySantos 你能回答你自己的问题吗?谢谢!
-
我的代码打印了两次-- Ack! diff 输出实际上告诉您:您看到
@@...@@之后的两条 INSERT 行?第一个以空格开头(即不是-或+)。这意味着该行对两个文件都是通用的。下一行以+开头。这意味着新文件有额外的一行,即新文件有两个 INSERT 行,而旧文件有一个 INSERT 行。而且,如前所述,新文件是实际文件,旧文件是预期文件。 (如果一行以-开头,则旧文件有该行,但新文件没有。)
标签: ruby-on-rails ruby rspec rspec-rails