首页 > 解决方案 > testthat 'expect_equal' 返回一个错误 - 尽管实际输出和预期输出相同,但它不是真的

问题描述

我正在编写一个测试脚本来测试是否根据我的逻辑进行了一些修改。我的预期输出和实际输出是完全相同的 json 文件。我的目的是检查实际输出是否等于预期输出。首先我的函数是这样的,它必须从该位置读取 json 文件,并且必须将 parentTCode 字符替换为 null,因为我们只需要 parentTCode 中的数字。

LoadData = function(inputPath) {
  options(encoding = "UTF-8")
  if(file.exists(inputPath)) {
    setting = read_json(path = inputPath, simplifyVector = TRUE)
    setting$ParentTCode = stri_replace(str = setting$ParentTCode, replacement = "", fixed = "T")
  } else {
    stop(paste0("There's no setting json file at ", inputPath))
  }
  return(setting)
}

我的测试脚本是这样的

test_that(desc = "Test for 'LoadData' Condition 1",
          code = {
            filePath = "./Test/Data/Input/setting.json"
            expected_output = "./Test/Data/expected_output.json"
            expect_equal(LoadData(inputPath = filePath), expected_output)
            }
)

我很困惑,为什么当实际输出和预期输出都相同时会抛出这样的错误。

Error: LoadSettingJsonLDG(inputPath = filePath) not equal to `expected_output`.
Modes: list, character
names for target but not for current
Length mismatch: comparison on first 1 components
Component 1: 1 string mismatch

我将在此处附上我的json文件示例。如下

{
  "ParentTCode": ["T2802"],
  "Code": ["0001"],
  "DataType": ["Diva"],
  "FileExtention": [null],
  "Currency": [false],
  "OriginalUnit": [1000],
  "ExportUnit": [1000000]
}

这是 LoadData 函数的输入文件。输出看起来像这样

{
  "ParentTCode": ["2802"],
  "Code": ["0001"],
  "DataType": ["Diva"],
  "FileExtention": [null],
  "Currency": [false],
  "OriginalUnit": [1000],
  "ExportUnit": [1000000]
}

如果有人可以帮助我,我会很高兴。提前致谢。

标签: rjsontestthat

解决方案


调用的第二个参数expect_equalcharacter,长度为 1,它是指向包含您期望输出的文件的路径。由于第一个参数是 a list,因此 acharacterlist不相等也就不足为奇了。

我认为您打算与该文件的解析内容进行比较。如果您将测试替换为:

test_that(desc = "Test for 'LoadData' Condition 1",
          code = {
            filePath = "./Test/Data/Input/setting.json"
            expected_output = "./Test/Data/expected_output.json"
            expect_equal(LoadData(inputPath = filePath),
                         fromJSON(expected_output))
            }
)

它应该工作。


推荐阅读