Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Node.js ES6伊斯坦布尔代码覆盖率:如何正确测试分支_Node.js_Mocha.js_Istanbul_Nyc - Fatal编程技术网

Node.js ES6伊斯坦布尔代码覆盖率:如何正确测试分支

Node.js ES6伊斯坦布尔代码覆盖率:如何正确测试分支,node.js,mocha.js,istanbul,nyc,Node.js,Mocha.js,Istanbul,Nyc,我不明白测试覆盖率是如何处理这个.catch()分支的: 我正在正确测试第一个块: 如果(e.name=='ValidationError'&&e.errors.username.kind=='unique'){…) 我没有对第二个else块进行测试,所以我添加了一个ignorenext语句: 否则{ /*伊斯坦布尔下一站*/ 其次(e); } 代码覆盖率将第58行(如果…)报告为未覆盖 | % Stmts | % Branch | % Funcs | % Lines |Uncovere

我不明白测试覆盖率是如何处理这个.catch()分支的:

我正在正确测试第一个块:

如果(e.name=='ValidationError'&&e.errors.username.kind=='unique'){…)

我没有对第二个else块进行测试,所以我添加了一个ignorenext语句:

否则{ /*伊斯坦布尔下一站*/ 其次(e); }

代码覆盖率将第58行(如果…)报告为未覆盖

 |  % Stmts | % Branch |  % Funcs |  % Lines |Uncovered Lines |
-|----------|----------|----------|----------|----------------|
 |      100 |    93.75 |      100 |      100 |             58 |
但是下面的测试正在正确执行,涵盖这一行

      describe('# POST /api/v1/users', () => {
        it('should NOT create a duplicated user', () => {
          return request(app)
            .post('/api/v1/users')
            .set('Authorization', superAdminJwtToken)
            .send(newUser)
            .expect(httpStatus.CONFLICT)
            .then((res) => {
              expect(res.body.error.message).to.equal('Existing user');
              expect(res.body.error.field).to.equal('username');
              expect(res.body.error.value).to.equal(newUser.username);
            });
        });
      });

解决方案是插入一个

/* istanbul ignore else */
如下

.catch(
  (e) => {
    /* istanbul ignore else */
    if (e.name === 'ValidationError' && e.errors.username.kind === 'unique') {
      res.status(409);
      res.json({ error: { message: 'Existing user', field: e.errors.username.path, value: e.errors.username.value } });
    } else {
      next(e);
    }
  })
那么代码覆盖率输出是100%

|%Stmts |%Branch |%Funcs |%Lines |未覆盖的行| -|----------|----------|----------|----------|----------------|
|100 | 100 | 100 | 100 |

解决方案是插入

/* istanbul ignore else */
如下

.catch(
  (e) => {
    /* istanbul ignore else */
    if (e.name === 'ValidationError' && e.errors.username.kind === 'unique') {
      res.status(409);
      res.json({ error: { message: 'Existing user', field: e.errors.username.path, value: e.errors.username.value } });
    } else {
      next(e);
    }
  })
那么代码覆盖率输出是100%

|%Stmts |%Branch |%Funcs |%Lines |未覆盖的行| -|----------|----------|----------|----------|----------------|
|100 | 100 | 100 | 100 | 100 |

您应该实际测试else,不要忽略它。注入一个不是
ValidationError
的错误,并查看是否执行else块工作。是的..我应该..但任何其他错误都与save()相关MongoDB中的文档,我不知道如何为它编写测试…有链接吗?@erwin我遇到了这个问题,因为我面临同样的问题
伊斯坦布尔
报告了错误的代码覆盖率。请告诉我您是否找到了一些解决方案。我同意@slebetman:为了覆盖率,您不应该忽略。如果您重新使用
sinon
进行stubing/spying/mock,您可以在
examples/
下查看。这会让您了解如何执行@slebetman建议的操作您应该实际测试else,不要忽略它。插入一个不是
ValidationError
的错误,并查看是否执行else块工作。是的..我应该..但是任何其他错误都与save()相关MongoDB中的文档,我不知道如何为它编写测试…有链接吗?@erwin我遇到了这个问题,因为我面临同样的问题
伊斯坦布尔
报告了错误的代码覆盖率。请告诉我您是否找到了一些解决方案。我同意@slebetman:为了覆盖率,您不应该忽略。如果您重新使用
sinon
进行stubing/spying/mocking,您可以在
示例/
下查看。这会让您了解@slebetman推荐的方法