RSpec - 相同的字符串未通过比较

时间:2016-07-31 17:07:09

标签: ruby-on-rails ruby rspec rspec-rails

我正在对我在Rails中编写的XML解析器的输出进行测试。当我运行RSpec时它会失败并向我显示它预期的内容'它得到了什么'它们的内容至少是相同的。

我尝试过使用eq,eql,等于和匹配,但没有一个有效。

测试:

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);

1 个答案:

答案 0 :(得分:0)

问题是我的代码是两次打印出来的。由于7stud,我发现了这个错误:

  

你看到@@ ... @@之后的两条INSERT行?第一个以空格开头(即不是 - 或者+)。这意味着该行对两个文件都是通用的。下一行以+开头。这意味着新文件具有该附加行,即新文件具有两个INSERT行,而旧文件具有一个INSERT行。并且,如前所述,新文件是实际的,旧文件是预期的。 (如果一行以 - 开头,则旧文件具有该行,但新文件没有。)