【发布时间】:2020-04-17 13:43:51
【问题描述】:
如果我要测试的函数正在使用常量,我应该在测试时使用这些常量吗?
例如,如果这是函数:
export const SERVER_FILTERS = {
URL: 'pageURL',
PLATFORM: 'platform',
TRAFFIC_SOURCE: 'trafficSource',
COUNTRY: 'country',
OPERATING_SYSTEM: 'operatingSystem',
STATE: 'state',
};
export const formatUrlFilterForServer = filter => {
return filter.conditions.map(({ value }) => {
return {
variable: SERVER_FILTERS.URL,
value,
};
});
};
我应该在测试中使用SERVER_FILTERS 吗?还是明确写出我想在预期结果中看到的字符串更好?
例如:
describe('formatUrlFilterForServer', () => {
it('should format the URL filter correctly', () => {
const value = 'blah.com';
const filter = {
conditions: [
{ value },
],
};
const expectedResult = [
{
variable: SERVER_FILTERS.URL,
value,
},
];
expect(formatUrlFilterForServer(filter)).toEqual(expectedResult)
})
});
一方面,如果我更改此常量,我不想检查所有测试并修复它们。 另一方面,我认为我的测试应该发现我的代码可能存在的所有问题,甚至是其常量中的拼写错误。
这里有更好的做法吗?谢谢大家。
【问题讨论】:
-
嗯,你在测试什么? 外部 API?该功能的消费者将如何使用该功能?内部验证?
-
我正在进行单元测试,以确保该功能正常工作。在我的示例中 - 消费者将使用此函数在将某些值发送到服务器之前对其进行格式化。
-
那么,消费者是否会使用常量和/或需要特定的返回值……?例如。如果函数需要返回一个特定的字符串是没有用的,但是您正在测试它返回一个实际上不包含该字符串的常量......
-
你能再解释一下吗?不知道我明白你的意思。我所理解的是,这里没有我应该遵循的一般方法,如果我错了,请纠正我。
-
当实际值无关紧要时,您可以使用常量而不是字符串,并且您只想确保在任何地方都使用 same 值。编程语言会在您输入常量时告诉您,而对于裸字符串,它不会告诉您相同的信息。那么,您是想测试您的函数是否返回正确的常量,还是因为实际值本身是有意义的,所以您关心返回的究竟是什么值?
标签: javascript unit-testing testing jestjs