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
Unit testing 可选单元的单元测试_Unit Testing_Mocha.js - Fatal编程技术网

Unit testing 可选单元的单元测试

Unit testing 可选单元的单元测试,unit-testing,mocha.js,Unit Testing,Mocha.js,我有一个Node.js软件,它包含几个可选单元。每个可选单元都要求用户下载并安装特定的第三方软件。其他(非可选)单元在没有第三方的情况下工作 现在,我有一套针对所有单元的Mocha.js单元测试,包括可选单元。因为我已经安装了所有第三方,所以所有测试都在我的计算机上通过。然而,如果一个天真的用户下载我的软件包并运行测试,他会因为缺少第三方而收到难看的错误消息 安排测试的最佳方式是什么,这样对于每个用户,只运行相关的测试 目前,我使用的代码与此类似: try { var thirdpart

我有一个Node.js软件,它包含几个可选单元。每个可选单元都要求用户下载并安装特定的第三方软件。其他(非可选)单元在没有第三方的情况下工作

现在,我有一套针对所有单元的Mocha.js单元测试,包括可选单元。因为我已经安装了所有第三方,所以所有测试都在我的计算机上通过。然而,如果一个天真的用户下载我的软件包并运行测试,他会因为缺少第三方而收到难看的错误消息

安排测试的最佳方式是什么,这样对于每个用户,只运行相关的测试

目前,我使用的代码与此类似:

try {
    var thirdparty = require('thirdparty');
    var isTestRelevant = true;
} catch (e) {
    console.warn("WARNING: no thirdparty module - can't run this unitest");
    var isTestRelevant = false;
}

if (isTestRelevant) {
    describe('the unit', function() {
        it('does something', function() { ... }
    });

    describe('the unit', function() {
        it('does something else', function() { ... }
    });
}

可选单元是否有更好、更通用的解决方案?

理想情况下,可以使用
描述
it
上的
跳过
,将测试标记为挂起。看

虽然在您的示例中,布尔值用于确定是否将测试标记为挂起,但这里有一个解决方案

如果
it()。看


这里有一个例子。如果我们有一个名为
conditionalTests.test.js的文件

var assert = require('assert');

describe("The Assert module", function () {
  it("sees true as true", function() {
    assert.ok(true);
  });

  it("sees false as not true", function() {
    assert.ok(!false);
  });
});
…在它上面调用Mocha,两个测试都将运行(它们通过,这并不奇怪):

…但是,如果第二个测试是这样更改的(使用三元中的
istestreevant
变量,其中
null
可以作为回调参数):

…如果
isterevent
为false,则该测试将显示为挂起:

  The Assert module
    ✓ sees true as true 
    - sees false as not true


  1 passing (19ms)
  1 pending

要根据IStreelevant更改测试名称,请以类似方式再次使用三元运算符

创建另一个变量以保存要更改的名称:

var skippedTestName = "A test was skipped because ...";
…然后将“sees false as not true”测试的语法更改为:

现在,测试输出将如下所示:

  The Assert module
    ✓ sees true as true 
    - A test was skipped because ...


  1 passing (19ms)
  1 pending

理想情况下,可以在
描述
it
上使用
跳过
,将测试标记为挂起。看

虽然在您的示例中,布尔值用于确定是否将测试标记为挂起,但这里有一个解决方案

如果
it()。看


这里有一个例子。如果我们有一个名为
conditionalTests.test.js的文件

var assert = require('assert');

describe("The Assert module", function () {
  it("sees true as true", function() {
    assert.ok(true);
  });

  it("sees false as not true", function() {
    assert.ok(!false);
  });
});
…在它上面调用Mocha,两个测试都将运行(它们通过,这并不奇怪):

…但是,如果第二个测试是这样更改的(使用三元中的
istestreevant
变量,其中
null
可以作为回调参数):

…如果
isterevent
为false,则该测试将显示为挂起:

  The Assert module
    ✓ sees true as true 
    - sees false as not true


  1 passing (19ms)
  1 pending

要根据IStreelevant更改测试名称,请以类似方式再次使用三元运算符

创建另一个变量以保存要更改的名称:

var skippedTestName = "A test was skipped because ...";
…然后将“sees false as not true”测试的语法更改为:

现在,测试输出将如下所示:

  The Assert module
    ✓ sees true as true 
    - A test was skipped because ...


  1 passing (19ms)
  1 pending

谢谢,这比我以前的解决方案好多了。当测试被禁用时,是否有任何方法可以让Mocha在报告中添加自定义消息,例如:“-将false视为not true此测试被禁用,因为您没有安装false.js模块”?@ErelSegalHalevi不客气。这是可能的,尽管这会使情况更加混乱。:)我用一个例子更新了我的答案。谢谢!我想你的答案应该是Mocha.js的标准功能:)@tstanton,谢谢!我采用了一种稍微不同的方法来创建可选测试的概念。如果通过,则一切正常;如果失败,则将特定测试标记为可选测试。这里有更多信息:我无法抗拒,为此创建了一个npm模块:谢谢,这比我以前的解决方案好得多。当测试被禁用时,是否有任何方法可以让Mocha在报告中添加自定义消息,例如:“-将false视为not true此测试被禁用,因为您没有安装false.js模块”?@ErelSegalHalevi不客气。这是可能的,尽管这会使情况更加混乱。:)我用一个例子更新了我的答案。谢谢!我想你的答案应该是Mocha.js的标准功能:)@tstanton,谢谢!我采用了一种稍微不同的方法来创建可选测试的概念。如果通过,则一切正常;如果失败,则将特定测试标记为可选测试。这里有更多信息:无法抗拒自己,为此创建了一个npm模块: