testthat 'expect_equal' returns 一个错误 - 尽管实际输出和预期输出相同,但事实并非如此
testthat 'expect_equal' returns an error - it isn't true though the actual output and exepected outputs are the same
我正在写一个测试脚本来测试一些修改是否按照我的逻辑进行了。我的预期输出和实际输出是完全相同的 json 文件。我的目的是检查实际输出是否等于预期输出。首先,我的函数是这样的,它必须从该位置读取 json 文件,并且必须用 null 替换 parentTCode 字符,因为我们只需要 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 文件样本 here.It 如下
{
"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]
}
如果有人能帮助我,我会很高兴。提前致谢。
您的 expect_equal
调用的第二个参数是 character
,长度为 1,它是指向包含您期望的输出内容的文件的路径。由于第一个参数是 list
,因此 character
和 list
不相等也就不足为奇了。
我认为您打算与该文件的解析内容进行比较。如果您将测试替换为:
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))
}
)
应该可以。
我正在写一个测试脚本来测试一些修改是否按照我的逻辑进行了。我的预期输出和实际输出是完全相同的 json 文件。我的目的是检查实际输出是否等于预期输出。首先,我的函数是这样的,它必须从该位置读取 json 文件,并且必须用 null 替换 parentTCode 字符,因为我们只需要 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 文件样本 here.It 如下
{
"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]
}
如果有人能帮助我,我会很高兴。提前致谢。
您的 expect_equal
调用的第二个参数是 character
,长度为 1,它是指向包含您期望的输出内容的文件的路径。由于第一个参数是 list
,因此 character
和 list
不相等也就不足为奇了。
我认为您打算与该文件的解析内容进行比较。如果您将测试替换为:
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))
}
)
应该可以。