- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
Mocha之间具体有什么区别?的 before()
和 beforeEach()
? (after()
和 afterEach()
的相同问题。)
我假设 before()
每个 describe()
block 运行一次,而 beforeEach()
每个测试运行一次(它()
block )。是真的吗?
我什么时候会选择使用一个而不是另一个?
最佳答案
before()
在 all describe
测试之前运行一次after()
在所有 describe
测试之后运行一次beforeEach()
在 describe
中的each 测试之前运行afterEach()
在 describe
具体使用哪一个,要看你的实际测试情况。
现在,进行详细的解释。如果您对此运行 mocha -R min
:
describe("top", function () {
before(function () {
console.log("top before");
});
after(function () {
console.log("top after");
});
beforeEach(function () {
console.log("top beforeEach");
});
afterEach(function () {
console.log("top afterEach");
});
it("test1", function () {
console.log("top test1");
});
describe("sublevel", function() {
before(function () {
console.log("sublevel before");
});
after(function () {
console.log("sublevel after");
});
beforeEach(function () {
console.log("sublevel beforeEach");
});
afterEach(function () {
console.log("sublevel afterEach");
});
it("test1", function () {
console.log("sublevel test1");
});
it("test2", function () {
console.log("sublevel test2");
});
});
it("test2", function () {
console.log("top test2");
});
});
你会看到类似的东西(我省略了不相关的输出):
top before
top beforeEach
top test1
top afterEach
top beforeEach
top test2
top afterEach
sublevel before
top beforeEach
sublevel beforeEach
sublevel test1
sublevel afterEach
top afterEach
top beforeEach
sublevel beforeEach
sublevel test2
sublevel afterEach
top afterEach
sublevel after
top after
如果您查看子级别的每个测试之前和之后执行的内容,您可能会感到惊讶的是,两者 beforeEach
在子级别被调用。 afterEach
也一样。
有些人也对 sublevel before
、top beforeEach
、sublevel beforeEach
的顺序感到惊讶。他们认为外部作用域中的所有钩子(Hook)应该在内部作用域中的所有钩子(Hook)之前执行,所以他们期望序列:top beforeEach
, sublevel before
, 子级别 beforeEach
。然而,Mocha 执行 Hook 的顺序是完全合理的:before
Hook 旨在为一组测试设置阶段,而 beforeEach
测试则针对每个个人测试。当 Mocha 执行测试时,在包含它的 describe
中设置的所有 before
和 beforeEach
钩子(Hook),以及它的所有祖先describe
适用于测试。 Mocha 会执行从最外层作用域到最内层的每个 before
钩子(Hook),以及从最外层作用域到最内层的所有 beforeEach
钩子(Hook)。 但是,应用的所有before
Hook 都在任何beforeEach
Hook 之前执行。这解释了上面的顺序:sublevel before
在 top beforeEach
之前执行,因为它是一个 before
Hook 。对于 after
和 afterEach
,适用相同的逻辑,但顺序相反:所有适用的 afterEach
Hook 在任何 之前执行在
钩子(Hook)之后。
另请注意,Mocha 不关心我如何排序我的 it
调用相对于顶层 describe
中的 describe
调用。它执行 top test1
、top test2
和 then 子级测试,即使我给出的命令是 top test1
,然后是子级测试,然后是 top test2
。
你想在 before
、beforeEach
等中使用什么实际上取决于你的测试的细节。如果您需要设置一个模拟对象或数据结构,并且该对象或结构可以被单个describe
中的所有测试重用,您可以使用before
进行设置,after
将其拆除。如果您对结构进行只读测试,可能会出现这种情况。如果你所有的测试都只读取它,那么就没有必要一遍又一遍地创建它。如果您的describe
中的每个测试都需要结构的新 副本,因为每个测试都在修改 结构,那么您应该使用beforeEach
为每个测试重新创建结构,然后 afterEach
如果您需要彻底拆除它。这样做可确保测试隔离:每个测试都从已知状态开始,并且不依赖于前一个测试是否成功。
关于javascript - `before()` 和 `beforeEach()` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21418580/
是否保证在内部 beforeEach 开始之前完成外部 beforeEach? let qux; beforeEach(() => { // // other synchronous code
我正在尝试编写一个需要使用特定设置的测试类。当只有 1 个设置时,使用 @BeforeEach 很容易: @BeforeEach public void setup() { // my setup
有没有办法只针对某些测试(“it” block )不执行 beforeEach 函数。假设我有 10 个 it block ,我不希望为其中两个 block 执行 beforeEach。可能吗? 最佳
只是想知道当您使用 object 接口(interface)在 intern 中嵌套功能测试时 beforeEach 是如何工作的。例如 registerSuite({ name: 'Befo
在Using after or afterEach hooks ,建议在beforeEach或before中清理server/db状态。我理解基本原理,但我认为文本缺少一些实际用例。这是一个我不知道如
我得到 ReferenceError: initialState is not defined 当我在 beforeEach(()=> {... 中将 initialState 声明为 const 时
所以我的测试中有这两种情况。第一个工作正常,在第二个中,我尝试在外部提取 beforeEach 声明,但它失败了,但我不明白为什么。这是一个简单的情况,基本上我尝试定义一个数组并对其进行循环,以便使用
使用 Protractor 5.1.2 和 Jasmine2 来描述测试用例,如何获取在 beforeEach 方法中运行的当前测试用例/规范? 我想根据我正在运行的测试用例进行一些不同的设置。我不想
我有两个 Mocha 测试文件,每个文件都有自己的 beforeEach 函数。每个文件中的 beforeEach 对所有测试用例运行。用代码更好地解释: 用户.test.js: beforeEach
我在使用 Jasmine (+Karma + Webpack) 时遇到问题 我将测试范围缩小到 beforeEach 语句,而不是在运行 it block 之前等待执行 done() 回调。 编辑:
刚开始使用 Jasmine 并按照 the Jasmine website 上的说明进行操作对于异步测试,我注意到从未调用过 beforeEach 函数。 知道为什么不吗?我在网络上的任何地方都找不到
我正在使用 Protractor/Jasmine 编写 UI 测试。我希望在我所有的测试用例中执行一个特定的任务,即。读取跨度 (id="mytxt")。所以,我想在 beforeEach 中完成这个
我正在编写一个具有以下 jasmine 规范的 Rails 应用程序: describe "buttons", -> beforeEach -> loadFixtures("foo.htm
我一直在学习 AngularJS 教程,但在 beforeEach 的一项端到端测试中遇到了一个奇怪的问题。对于上下文,我目前在 step 3 的实验部分。 .测试代码在这里: 'use strict
谁能告诉我下面的 Jasmine 代码的区别,如果很愚蠢请原谅我 describe('Testing a Hello World controller', function() { var $
当我使用 beforeEach 异步时,我遇到了一种情况,并且我的规范中有一些测试。我看到 beforeEach 为每个运行的测试调用,而不是在所有测试之前只调用一次 - 我做错了什么?这是我的代码:
我知道为了测试 API 端点,应该模拟 xhtml 请求,但现在我想用真正的 API 来测试它。 我想做的事情: 打开一个页面,单击“连接”按钮,然后等待最多 10 秒,以便某个元素的 innerte
我正在尝试使用sequelize编写测试,并且我想在每次测试之前截断所有表。如果可能的话,我不想在每个测试文件中编写或运行它。有谁知道有什么方法可以做到这一点吗? 看来 Jest 应该支持类似的东西。
我正在使用 Jasmine 编写测试。 我有几个测试文件,每个文件都有一个beforeEach,但它们完全一样。 我如何为他们提供一个global beforeEach? 最佳答案 x1a4 的回答让
Mocha之间具体有什么区别?的 before() 和 beforeEach()? (after() 和 afterEach() 的相同问题。) 我假设 before() 每个 describe()
我是一名优秀的程序员,十分优秀!