Javascript 如何恰当地重用mocha测试的描述块?

Javascript 如何恰当地重用mocha测试的描述块?,javascript,selenium-webdriver,mocha.js,e2e-testing,webdriver-io,Javascript,Selenium Webdriver,Mocha.js,E2e Testing,Webdriver Io,我有一个应用程序可以在不同的模式下运行(可以将其视为在不同的平台上运行以及使用不同的协议),其中一个应用程序在每次打开页面时都有很长的加载周期。还有一些其他的小改动,但所有这些都可以使用wdio的设置变量来处理 目前,我为应用程序的每个部分都有一个测试文件(带有描述)。如果正在测试的配置中有一个没有这么长的等待时间,这将很好。无论如何,我决定处理这个测试用例,在一个文件中处理它,所有文件都在同一页上 无论如何,我不想把以前所有的测试都复制粘贴到这个大文件中,而是想知道是否可以以某种方式重用它们,

我有一个应用程序可以在不同的模式下运行(可以将其视为在不同的平台上运行以及使用不同的协议),其中一个应用程序在每次打开页面时都有很长的加载周期。还有一些其他的小改动,但所有这些都可以使用wdio的设置变量来处理

目前,我为应用程序的每个部分都有一个测试文件(带有描述)。如果正在测试的配置中有一个没有这么长的等待时间,这将很好。无论如何,我决定处理这个测试用例,在一个文件中处理它,所有文件都在同一页上

无论如何,我不想把以前所有的测试都复制粘贴到这个大文件中,而是想知道是否可以以某种方式重用它们,就好像它们是函数一样

正如现在一样,我只是在函数中包装了一些东西,例如:

// test1.js
module.exports = function test1 () {
  describe('Test1', function () {
    var settings = {}

    before(function () {
     // do something
    })

    it('do something', function () {
      assert.ok(true)
    })
    it('do something else', function () {
          assert.ok(true)
    })
  })
}
在另一个文件中,我们运行我们创建的每个函数:

test1 = require('./test1')
test2 = require('./test2')
...
test10 = require('./test10')
describe('Main Test', function () {
  test1()
  test2()
  ...
  test10()
}
如果我能用某种方式选择在我的命令上运行哪些测试函数,这就解决了我的枯燥问题

wdio wdio/wdio.conf.js——规范 wdio/test/spects/browser/test1.js

这显然是行不通的


基本上,我希望一个解决方案能够重用我的测试(描述块)。我所做的是正确的吗?如果没有,应该怎么做?

因此,在找到一些相关文档后,我找到了解决这个问题的最佳方法


我将按照前面描述的那样做,但是我不会将所有这些函数放在同一个文件中,而是将它们保存在它们自己的文件中。也许还有更好的解决方案,但复制和粘贴运行我的应用程序的不同模式的所有测试用例仍然是一种改进。

只需以编程方式创建不同的描述块即可。将descripe块包装在一个函数中,其中包含所有更改的参数(包括块的名称),只需调用函数即可创建变体


我做了一次小规模回购,在实践中证明了这一点:

很不清楚你所说的“同一页上的一个文件”是什么意思。并且代码没有显示任何要共享的代码。当您需要变量在所需文件和所需文件中都可见时,这就不太好用了。例如,在“用户登录时”创建共享上下文,并让用户在上下文中可用。至少,我不能让这样的东西工作。你把东西混在一起了。不同的文件不会改变这个概念。如果可以使用闭包,那么当然可以使用不同的文件(这只是代码组织)。您可以通过将用户上下文发送到创建描述块的函数中来共享它。@Pistos如果您需要动态创建测试套件的示例,我可以在Runkit上创建一个示例。我遇到的问题是我的共享代码引入的
用户
实例(例如,
let
)需要使内部块可用。e、 g.
whenUserSignedIn(函数(用户){description('more tests here')…})
不仅如此,还需要在
whenUserSignedIn
代码和
需要使用共享代码的文件之间共享supertest代理。特别是,
代理
将在
要求
-ing代码中实例化(在每个
之前的
中,不少于),但在共享代码中使用。这一切都是混乱和令人沮丧的,与rspec的易用性相去甚远。难道你不能在需要时在共享代码中导出函数并将变量传递给该函数吗?我不知道单独的文件如何使这变得更困难,但我会研究它。他多次使用这种方法