Javascript “是否有挂钩(或等效解决方案)”;就在测试结束时”;为了WebdriverIO?

Javascript “是否有挂钩(或等效解决方案)”;就在测试结束时”;为了WebdriverIO?,javascript,mocha.js,chai,webdriver-io,Javascript,Mocha.js,Chai,Webdriver Io,在这个问题上我一直在兜圈子——我不相信这是可能的——希望有人能证明我错了 在WebDrivero中,我有一个类似的测试套件(这里大大简化了!): 我想做的是在我的两个测试中的每一个测试结束时都调用某种钩子,但是使用的代码将包含一个进一步的“结束时所有测试的公共性”断言,因此可能会影响测试的结果-因此为什么“后测”是不好的。显然,我可以重复代码,或者在每个测试中定义一个函数并调用它,但是任何人都可以提供一种方法作为某种钩子来实现它,这样就不需要在每个测试结束时实际包含对它的调用——只是一个自动的或

在这个问题上我一直在兜圈子——我不相信这是可能的——希望有人能证明我错了

在WebDrivero中,我有一个类似的测试套件(这里大大简化了!):

我想做的是在我的两个测试中的每一个测试结束时都调用某种钩子,但是使用的代码将包含一个进一步的“结束时所有测试的公共性”断言,因此可能会影响测试的结果-因此为什么“后测”是不好的。显然,我可以重复代码,或者在每个测试中定义一个函数并调用它,但是任何人都可以提供一种方法作为某种钩子来实现它,这样就不需要在每个测试结束时实际包含对它的调用——只是一个自动的或隐含的调用


谢谢

这确实是可能的✅. 请参考下面的代码。需要包含it()块的测试文件,并在下一个实际it()块开始执行之前将其从缓存中删除。我已经附上了执行截图

spec.js

test.js

(或)

如果您希望这是一个单独的测试,请遵循以下步骤

spec.js

test.js


这确实是可能的✅. 请参考下面的代码。需要包含it()块的测试文件,并在下一个实际it()块开始执行之前将其从缓存中删除。我已经附上了执行截图

spec.js

test.js

(或)

如果您希望这是一个单独的测试,请遵循以下步骤

spec.js

test.js


我的观点是test.js被视为一个单独的测试,而不是一个钩子。有没有一种方法可以影响上一个测试本身的结果?您可以从it()块内部要求这个JS文件。我们需要删除test.js文件中的it(),该文件中的断言和其余部分保持不变。@Raju我已经编辑了答案并上传了截图。我已经提供了这两个选项。嗨@BharathKumarS-谢谢你在这方面的努力。不幸的是,虽然您的第一个解决方案(test.js没有包含自己的“it”块)已经接近尾声,但这个解决方案仍然存在我试图避免的问题——我不希望在每个测试中都有重复的代码(例如对test.js的require调用)。我希望用一个钩子来实现它——比如有点像‘afterEach’——但afterEach的问题是,当它被执行时,当前的测试已经完成,afterEach代码对测试结果没有任何影响……为了提供更多的上下文,我实际做的是在许多测试中跨多个断言使用try/catch块,然后我希望在每个测试结束时都有一个包装器钩子/函数来抛出该测试的错误,然后再进行下一个测试,如果这样做有意义的话!我的观点是test.js被视为一个单独的测试,而不是一个钩子。有没有一种方法可以影响上一个测试本身的结果?您可以从it()块内部要求这个JS文件。我们需要删除test.js文件中的it(),该文件中的断言和其余部分保持不变。@Raju我已经编辑了答案并上传了截图。我已经提供了这两个选项。嗨@BharathKumarS-谢谢你在这方面的努力。不幸的是,虽然您的第一个解决方案(test.js没有包含自己的“it”块)已经接近尾声,但这个解决方案仍然存在我试图避免的问题——我不希望在每个测试中都有重复的代码(例如对test.js的require调用)。我希望用一个钩子来实现它——比如有点像‘afterEach’——但afterEach的问题是,当它被执行时,当前的测试已经完成,afterEach代码对测试结果没有任何影响……为了提供更多的上下文,我实际做的是在许多测试中跨多个断言使用try/catch块,然后我希望在每个测试结束时都有一个包装器钩子/函数来抛出该测试的错误,然后再进行下一个测试,如果这样做有意义的话!
describe ('My suite', function () {
  it ('Is the first test', function () {
     expect(1).to.equal(2);
  });
  it ('Is the second test', function () {
     expect(2).to.equal(2);
  });
});
describe('Basic checks for internet app', () => {

  let resolved

  it('should have the right title', async () => {
    await browser.url('https://webdriver.io');
    const title = await browser.getTitle();
    assert.strictEqual(title, 'WebdriverIO · Next-gen WebDriver test framework for Node.js');
    require('./test');
    resolved = require.resolve('./test');
    delete require.cache[resolved];
  })



  it('should assert the wrong right title', async () => {
    await browser.url('https://webdriver.io');
    const title = await browser.getTitle();
    return assert.strictEqual(title, 'Next-gen WebDriver test framework for Node.js');
    require('./test');
    resolved = require.resolve('./test');
    delete require.cache[resolved];
  })


})
import assert from 'assert';

    assert.equal(2, 2)
describe('Basic checks for internet app', () => {

  let resolved

  it('should have the right title', async () => {
    await browser.url('https://webdriver.io');
    const title = await browser.getTitle();
    return assert.strictEqual(title, 'WebdriverIO · Next-gen WebDriver test framework for Node.js');
  })

  require('./test');
  resolved = require.resolve('./test');
  delete require.cache[resolved];

  it('should assert the wrong right title', async () => {
    await browser.url('https://webdriver.io');
    const title = await browser.getTitle();
    return assert.strictEqual(title, 'Next-gen WebDriver test framework for Node.js');
  })

  require('./test');
  resolved = require.resolve('./test');
  delete require.cache[resolved];


})
import assert from 'assert';

it('should be executed', () => {

    assert.equal(2, 2)

})