【问题标题】:Is it a good practice to place an assertion in the afterEach block?在 afterEach 块中放置断言是一种好习惯吗?
【发布时间】:2019-09-26 05:27:45
【问题描述】:

环境:量角器、茉莉花、打字稿

我有几个测试具有不同的设置和相同的断言。 在 describe 内的每个 it 和 afterEach 块中的 expect 断言中输入不同的步骤是一种好习惯吗?

示例: 表单包含phoneNumberField 和一个submitBtn;

测试 1:在 phoneNumberField 中输入的数字太短 => 期望 submitBtn 被禁用。

测试 2:在 phoneNumberField 中输入文本 => 期望 submitBtn 被禁用 示例代码:

describe('Invalid phone number => submitBtn disabled', () => {

    afterEach(() => {
        expect(submitBtn.isEnabled()).toBeFalsy();
    });

    it('Too short number input', () => {
        phoneNumberField.sendKeys('012');
    });

    it('Text input', () => {
        phoneNumberField.sendKeys('asdf');
    });
});

【问题讨论】:

    标签: protractor automated-tests webautomation protractor-net


    【解决方案1】:

    老实说,我很惊讶它以这种方式工作......我想说“不,这不是一个好习惯......”但在玩了一段时间后我没有发现这样做有任何缺点几分钟。

    但我仍然不会这样做,因为如果你将expect() 放在it() 块中,很容易看到你的测试中的逻辑顺序(例如打开页面-> 期待 smtng;单击按钮->期待smtng;等)

    但是你可以实现它,使用它一段时间,看看它是否适合你自己

    附:只是为了形象化为什么我认为这不是一个可怕的想法,因为它似乎是:有以下代码

    beforeAll(async () => {expect(true).toBe(false)});
    
    it("1", async () => {
    });
    
    it("2", async () => {
    });
    
    it("3", async () => {
    });
    

    将产生以下输出

    Suite: UCare - Provider Search - 'Places' tab
        ✗ 1 (0.002 sec)
          - Expected true to be false.
              at UserContext.beforeAll (/Users/spleshakov/Documents/ui-automation/protractor/custom_implementation/test.spec.js:11:38)
              at /Users/spleshakov/Documents/ui-automation/node_modules/jasminewd2/index.js:112:25
              at new Promise (<anonymous>)
              at SimpleScheduler.promise (/Users/spleshakov/Documents/ui-automation/node_modules/selenium-webdriver/lib/promise.js:2242:12)
              at schedulerExecute (/Users/spleshakov/Documents/ui-automation/node_modules/jasminewd2/index.js:95:18)
              at promise (/Users/spleshakov/Documents/ui-automation/node_modules/selenium-webdriver/lib/promise.js:2232:22)
              at new Promise (<anonymous>)
    
        ✗ 2 (1 sec)
          - Expected true to be false.
              at UserContext.beforeAll (/Users/spleshakov/Documents/ui-automation/protractor/custom_implementation/test.spec.js:11:38)
              at /Users/spleshakov/Documents/ui-automation/node_modules/jasminewd2/index.js:112:25
              at new Promise (<anonymous>)
              at SimpleScheduler.promise (/Users/spleshakov/Documents/ui-automation/node_modules/selenium-webdriver/lib/promise.js:2242:12)
              at schedulerExecute (/Users/spleshakov/Documents/ui-automation/node_modules/jasminewd2/index.js:95:18)
              at promise (/Users/spleshakov/Documents/ui-automation/node_modules/selenium-webdriver/lib/promise.js:2232:22)
              at new Promise (<anonymous>)
    
        ✗ 3 (0.907 sec)
          - Expected true to be false.
              at UserContext.beforeAll (/Users/spleshakov/Documents/ui-automation/protractor/custom_implementation/test.spec.js:11:38)
              at /Users/spleshakov/Documents/ui-automation/node_modules/jasminewd2/index.js:112:25
              at new Promise (<anonymous>)
              at SimpleScheduler.promise (/Users/spleshakov/Documents/ui-automation/node_modules/selenium-webdriver/lib/promise.js:2242:12)
              at schedulerExecute (/Users/spleshakov/Documents/ui-automation/node_modules/jasminewd2/index.js:95:18)
              at promise (/Users/spleshakov/Documents/ui-automation/node_modules/selenium-webdriver/lib/promise.js:2232:22)
              at new Promise (<anonymous>)
    

    可以看出,报告正在正常打印,其中每个失败都显示为it() 测试用例的失败

    【讨论】:

    • 同意。我们实际上有 linting 规则设置,只允许在 it 块中进行断言。将它们放在您的设置中并拆除它们感觉不对。
    • @tehbeardedone 尽管如果确实发生了故障,它们将显示为it() 块的一部分。再次,我只是感到惊讶......
    猜你喜欢
    • 2015-10-01
    • 2010-11-25
    • 2022-01-20
    • 2017-12-09
    • 2013-02-04
    • 2012-08-22
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    相关资源
    最近更新 更多