在 afterEach 块中放置一个断言是一个好习惯吗?
Is it a good practice to place an assertion in the afterEach block?
环境:量角器、茉莉花、打字稿
我有几个具有不同设置和相同断言的测试。
在 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');
});
});
老实说,我很惊讶它以这种方式工作...我本来想说 "no, it's not a good practice...",但在试用了几分钟后,我没有发现这样做有任何缺点。
但我还是不会这样做,因为如果你将 expect()
放在 it()
块中,很容易看出你的测试中的逻辑顺序(例如打开页面->期望smtng;单击按钮->期待 smtng;等)
但您可以直接实施它,使用一下,看看它是否适合您自己
P.S。只是为了形象化为什么我认为这不是一个看起来很糟糕的主意:具有以下代码
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()
测试用例失败
环境:量角器、茉莉花、打字稿
我有几个具有不同设置和相同断言的测试。
在 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');
});
});
老实说,我很惊讶它以这种方式工作...我本来想说 "no, it's not a good practice...",但在试用了几分钟后,我没有发现这样做有任何缺点。
但我还是不会这样做,因为如果你将 expect()
放在 it()
块中,很容易看出你的测试中的逻辑顺序(例如打开页面->期望smtng;单击按钮->期待 smtng;等)
但您可以直接实施它,使用一下,看看它是否适合您自己
P.S。只是为了形象化为什么我认为这不是一个看起来很糟糕的主意:具有以下代码
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()
测试用例失败