当我循环测试用例时,为啥 Mocha 会跳过重新分配变量?
Posted
技术标签:
【中文标题】当我循环测试用例时,为啥 Mocha 会跳过重新分配变量?【英文标题】:Why does Mocha skip reassigning the variable when I loop over test cases?当我循环测试用例时,为什么 Mocha 会跳过重新分配变量? 【发布时间】:2019-11-24 16:18:13 【问题描述】:我正在寻找有关 javascript 或 Node.js 内部工作原理的解释。我有这个单元测试:
const assert = require("assert");
const expect = require("chai").expect;
process.env.NODE_ENV = "development";
const run = ["development", "production"];
for (const environment of run)
// $first line: this code is skipped on the second "production" run causing the test to fail
process.env.NODE_ENV = environment;
describe(`in $environment mode`, () =>
it(`process.env.NODE_ENV should be '$environment'`, () =>
// $second line: When I add the following line, the test is successful
// process.env.NODE_ENV = environment;
expect(process.env.NODE_ENV).to.equal(environment);
);
// more test cases dependant on environment
在我的 Node.js 环境中,第二个 process.env.NODE_ENV = environment;
在执行期间总是被跳过。我来自 Java 背景。在 Java 中,我从来没有在单线程环境中跳过代码的经验。我认为这与 Javascript 的异步特性有关。
请解释为什么第一行被跳过而第二行起作用。如何在 describe
和 it
之外进行重新分配工作?
【问题讨论】:
it()
是异步的吗?
你怎么知道它被跳过了,因为你在第二行设置了同样的东西?
@Barmar 这是 mocha 测试框架。他们的文档mochajs.org/api/mocha 没有具体说明。
发布不起作用的代码,不要混入改变行为的代码。
你需要将process.env.NODE_ENV = environment
移动到实际测试中。在循环完成之前,测试框架不会运行任何测试,这意味着 var 甚至在第一次测试运行之前就具有最后一次迭代的值。您的代码只描述了测试,它是执行它们的框架,并且它是异步执行的。与其说是语言如何工作,不如说是测试框架是如何设计的。
【参考方案1】:
该行没有被跳过,但它会在循环中的每次迭代中执行,甚至在第一个测试运行之前。在循环完成之前,测试框架不会运行您的任何测试,这意味着 process.env.NODE_ENV
在第一个测试运行时具有最后一次迭代的值。
您的代码只描述了测试,它是执行它们的框架,并且它是异步执行的。这就是为什么您需要将该行放在实际测试中。
与其说是语言如何工作,不如说是 Mocha 测试框架是如何设计的。
【讨论】:
以上是关于当我循环测试用例时,为啥 Mocha 会跳过重新分配变量?的主要内容,如果未能解决你的问题,请参考以下文章
当我在 Eclipse 中运行 Junit 测试用例时,出现错误
当我尝试运行测试用例时,它显示了 shallowMount 错误,如何修复 VUE.JS 中的 ShallowMount 错误?
当我运行测试用例时,实体管理器已成功注入,但在运行 Web 应用程序时抛出 NullPointerException
当我运行测试用例时,出现此错误: psycopg2.OperationalError: cursor "_django_curs_140351416325888_23" does