请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

是这样的,我在单元测试中测试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

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

正在回答 回答被采纳积分+3

1回答

双越 2019-12-15 09:22:19

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

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

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

0 回复 有任何疑惑可以回复我~
  • 提问者 Bingyuan #1
    return user.indexOf(${LUSERNAME})  这个是我手误,外面有嵌套符号的。我的问题简化一下其实很简单,是我粘贴了太多代码了。
    
    就是indexOf后面嵌套的内容,在单元测试中只有模版字符串`- ${LUSERNAME}`才能得出正确结果,我去掉前面的- (-和空格)就会报错,明明去掉那两个字符也是可以匹配上的啊。我看老师这么写以为是因为有空格所以必须要这么写的,但是在单元测试外写js代码做测试又没有问题。
    回复 有任何疑惑可以回复我~ 2019-12-15 19:52:53
  • 双越 回复 提问者 Bingyuan #2
    那你就看去掉 `- `之后,user 和 LUSERNAME 分别是什么值?然后再具体分析。
    回复 有任何疑惑可以回复我~ 2019-12-15 20:10:11
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信