对于测试用例中indexOf()的问题

来源:12-4 单元测试和总结

Bingyuan

2019-12-15

老师,有个问题我百思不得其解,虽然是小问题,也可以跳过,但还是麻烦老师帮我看看。

是这样的,我在单元测试中测试at列表功能时,发现一个问题,为了方便,我把lisi的字符串常量写到代码块里了,整个代码块是这样的:

test('获取at列表,应该能成功', async () => {
  const LUSERNAME = 'lisi';
  const result = await server
    .get('/api/user/getAtlist')
    .set('cookie', Z_COOKIE);

  function checkUser(user) {
    return user.indexOf(`- ${LUSERNAME}`);
  }

  const haveUser = result.body.some(user => {
    return checkUser(user);
  });

  expect(haveUser).toBeTruthy();
});

这样做,是没有问题的,但是当我把第八行代码改为return user.indexOf(LUSERNAME);或者return user.indexOf(${LUSERNAME});时,就报错了,说received False,也就是说如果我不是用- ${LUSERNAME}这样的字符串模板写法就会报错。我在外面专门写了个函数测试indexOf函数,代码是这样写的

const strExa = ['why - whyit', 'what - what'];
const WHY = 'whyit';

function checkIndex(str) {
  return str.indexOf(WHY);
}

const result = checkIndex(strExa[0]);

const result2 = strExa.some(item => {
  return checkIndex(item) > 0;
});

console.log(result);
console.log('第二个结果是:', result2);

得出的结果是这样的:

7
第二个结果是: true

在测试中发现完全没有必要写模板字符串啊,查也查不出来原因。虽然是个小问题,但是就是有点难受,老师请指导一下,谢谢!

写回答

1回答

双越

2019-12-15

其实,我没太看懂你的问题,感觉乱乱的。。。我先回复一下我 get 到的,然后你再补充。

return user.indexOf(${LUSERNAME}); —— 这么写肯定会报错,${xxx} 必须用模板字符串。

测试使用 `- ${username}` 这种形式,是为了匹配 '- username' 格式而不仅仅是匹配 'username' ,让测试更加精准一些。

0
2
双越
回复
Bingyuan
那你就看去掉 `- `之后,user 和 LUSERNAME 分别是什么值?然后再具体分析。
2019-12-15
共2条回复

Node.js+Koa2框架生态实战 - 从零模拟新浪微博

用 Koa2 做真正的实战项目,不再只是增删改查的小白工程师

964 学习 · 388 问题

查看课程