【问题标题】:How to run 'After' code on Mocha only on specific tests?如何仅在特定测试上在 Mocha 上运行“之后”代码?
【发布时间】:2016-06-18 13:43:11
【问题描述】:

编辑:这个问题已经回答,但我还有另一个类似的问题,我不想为其打开一个新线程。

我正在使用 Mocha 和 Chai 来测试我的项目。

作为我的代码的一部分,我创建了一个新用户并将他保存在我们的数据库中(以便测试用户可以在我们的应用程序上执行各种方法)。

一般来说,每次测试后我都想运行一个代码块,从数据库中删除用户,我使用“AfterEach”钩子来完成。

我的问题是我有 1 个测试(将来可能会更多)没有创建用户(例如,“尝试登录而不注册”),所以我的 AfterEach 代码收到错误(不能删除不存在的东西)。

Mocha 是否提供了在某些测试中禁用“AfterEach”的方法?或者我的问题的其他解决方案。

编辑:添加的问题:我的 AfterEach 挂钩涉及一个返回承诺的异步方法。在 Mocha 文档中,我只看到了一个使用回调的异步钩子示例。我应该如何使用返回承诺的 afterEach 钩子

【问题讨论】:

    标签: node.js unit-testing mocha.js


    【解决方案1】:

    您可以嵌套describe 块,这样您就可以对用户交互测试进行分组,也可以对“有用户”和“无用户”测试进行分组:

    describe('user interaction', () => {
    
      describe('with user in database', () => {
        // these will run only for the tests in this `describe` block:
        beforeEach(() => createUser(...));
        afterEach (() => deleteUser(...));
    
        it(...);
      });
    
      describe('without user in database', () => {
        it(...);
      });
    
    });
    

    【讨论】:

    • 谢谢!我还有另一个类似的问题。我的 afterEach 钩子涉及一个返回承诺的异步方法。在 Mocha 文档中,我只看到了一个使用回调的异步钩子示例。我应该如何使用返回承诺的 afterEach 钩子?
    • Mocha 具有内置的 Promise 支持,如果您从测试或其中一个钩子中返回一个,Mocha 将等到它解决后再继续。
    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多