Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该使用函数';在测试函数时,是什么样的常数?_Javascript_Unit Testing_Testing_Jestjs - Fatal编程技术网

Javascript 我应该使用函数';在测试函数时,是什么样的常数?

Javascript 我应该使用函数';在测试函数时,是什么样的常数?,javascript,unit-testing,testing,jestjs,Javascript,Unit Testing,Testing,Jestjs,如果我要测试的函数使用的是常量,那么我应该在测试它时使用这些常量吗 例如,如果这是函数: export const SERVER\u过滤器={ URL:'pageURL', 平台:'平台', 流量来源:“流量来源”, 国家:'国家', 操作系统:“操作系统”, 州:'州', }; 导出常量formatUrlFilterForServer=filter=>{ 返回filter.conditions.map({value})=>{ 返回{ 变量:SERVER_FILTERS.URL, 价值 }; }

如果我要测试的函数使用的是常量,那么我应该在测试它时使用这些常量吗

例如,如果这是函数:

export const SERVER\u过滤器={
URL:'pageURL',
平台:'平台',
流量来源:“流量来源”,
国家:'国家',
操作系统:“操作系统”,
州:'州',
};
导出常量formatUrlFilterForServer=filter=>{
返回filter.conditions.map({value})=>{
返回{
变量:SERVER_FILTERS.URL,
价值
};
});
};
我应该在测试中使用
SERVER\u过滤器吗?还是显式地编写我希望在预期结果中看到的字符串更好

例如:

description('formatUrlFilterForServer',()=>{
它('应该正确格式化URL筛选器',()=>{
常量值='blah.com';
常数过滤器={
条件:[
{value},
],
};
常数expectedResult=[
{
变量:SERVER_FILTERS.URL,
价值
},
];
expect(formatUrlFilterForServer(filter)).toEqual(expectedResult)
})
});
一方面,如果我改变这个常数,我不想检查所有的测试并修复它们。 另一方面,我认为我的测试应该发现我的代码可能存在的每一个问题,甚至常量中的拼写错误

这里有更好的做法吗?谢谢大家。

  • 您可以使用常量来避免输入错误,或者如果值本身并不重要,您只需要确保在任何地方都使用相同的值
  • 您正在测试代码,以确保它以某种特定的方式运行
这是这里要使用的两个公理。所以问题是,你在测试什么?返回值本身是否重要?您是否正在测试函数是否返回预期值或预期无意义标志

在单元测试中要问自己的另一件事是,如果您更改了某些内容,可能会出现什么问题,以及您的测试是否会抓住这些问题。如果您正在测试函数是否返回预期的常量,那么更改这些常量值是否有问题?您的函数现在可能返回不同的值,但常数的测试通过时不变。这是你想要的还是不想要的

因此,如果函数的职责是返回特定的字符串值(其确切的预期值可能由外力定义,并且必须精确对应),那么您需要测试函数是否返回该确切的字符串值。另一方面,如果您只想确认您的函数正在采取正确的逻辑步骤并生成预期的逻辑状态,但其精确值并不重要,那么测试常量就可以了

当然,您也可以分割差异:确认您的函数返回预期的常量,并在单独的测试中确认这些常量包含预期值。您只需要确保您的测试能够捕获错误的潜在原因

  • 您可以使用常量来避免输入错误,或者如果值本身并不重要,您只需要确保在任何地方都使用相同的值
  • 您正在测试代码,以确保它以某种特定的方式运行
这是这里要使用的两个公理。所以问题是,你在测试什么?返回值本身是否重要?您是否正在测试函数是否返回预期值或预期无意义标志

在单元测试中要问自己的另一件事是,如果您更改了某些内容,可能会出现什么问题,以及您的测试是否会抓住这些问题。如果您正在测试函数是否返回预期的常量,那么更改这些常量值是否有问题?您的函数现在可能返回不同的值,但常数的测试通过时不变。这是你想要的还是不想要的

因此,如果函数的职责是返回特定的字符串值(其确切的预期值可能由外力定义,并且必须精确对应),那么您需要测试函数是否返回该确切的字符串值。另一方面,如果您只想确认您的函数正在采取正确的逻辑步骤并生成预期的逻辑状态,但其精确值并不重要,那么测试常量就可以了


当然,您也可以分割差异:确认您的函数返回预期的常量,并在单独的测试中确认这些常量包含预期值。您只需要确保您的测试能够捕获错误的潜在原因

你在测试什么?外部API?该函数的使用者将如何使用该函数?内部验证?我正在进行单元测试,以确保功能正常工作。在我的示例中,消费者会在发送到服务器之前使用此函数格式化某些值。因此,消费者会使用常量和/或要求特定的返回值吗…?例如,如果函数需要返回一个特定的字符串,但您正在测试它是否返回一个实际不包含该字符串的常量,那么这是没有用的……您能再次尝试解释一下吗?我不太明白你的意思。我所理解的是,这里没有我应该遵循的通用方法,如果我错了,请纠正我。当实际值无关紧要时,您使用常量而不是字符串,并且您只想确保在任何地方都使用相同的值。编程语言会告诉你,当你输入了一个常数,它不能告诉你同样的空字符串。那么,您是想测试您的函数是否返回正确的常量,还是因为实际值本身是有意义的,所以您关心返回的值到底是什么?那么,您在测试什么?外部API?该函数的使用者将如何使用该函数?内部验证?我正在进行单元测试,以确保功能正常工作。在加州