Javascript ';它';和';测试';开玩笑?
我的测试组有两个测试。其中一个测试使用Javascript ';它';和';测试';开玩笑?,javascript,unit-testing,jestjs,Javascript,Unit Testing,Jestjs,我的测试组有两个测试。其中一个测试使用it,另一个测试使用test。他们两人的工作方式似乎非常相似。他们之间有什么区别 describe('updateAll', () => { it('no force', () => { return updateAll(TableName, ["fileName"], {compandId: "test"}) .then(updatedItems => {
it
,另一个测试使用test
。他们两人的工作方式似乎非常相似。他们之间有什么区别
describe('updateAll', () => {
it('no force', () => {
return updateAll(TableName, ["fileName"], {compandId: "test"})
.then(updatedItems => {
let undefinedCount = 0;
for (let item of updatedItems) {
undefinedCount += item === undefined ? 1 : 0;
}
// console.log("result", result);
expect(undefinedCount).toBe(updatedItems.length);
})
});
test('force update', () => {
return updateAll(TableName, ["fileName"], {compandId: "test"}, true)
.then(updatedItems => {
let undefinedCount = 0;
for (let item of updatedItems) {
undefinedCount += item === undefined ? 1 : 0;
}
// console.log("result", result);
expect(undefinedCount).toBe(0);
})
});
});
似乎
测试
处于,但它
不处于。状态。所以它们是完全相同的。它们是相同的东西。我使用TypeScript作为编程语言,当我查看来自/@types/Jest/index.d.ts的Jest包源代码中的定义文件时,我可以看到以下代码
显然,“test”有很多不同的名称,您可以使用其中任何一个
beforeAll声明变量:jest.Lifecycle;
在每个之前声明var:jest.Lifecycle;
毕竟声明var:jest.Lifecycle;
每次之后声明var:jest.Lifecycle;
声明变量descripe:jest.descripe;
声明变量描述:开玩笑,描述;
声明变量xdescripe:jest.descripe;
声明它:开玩笑,它;
声明var-fit:jest.It;
声明var-xit:jest.It;
声明var测试:jest.It;
声明var xtest:jest.It代码>正如其他答案所阐明的那样,他们做了同样的事情
我相信这两种测试都是为了进行1)“风格测试,比如:
const myBeverage = {
delicious: true,
sour: false,
};
describe('my beverage', () => {
it('is delicious', () => {
expect(myBeverage.delicious).toBeTruthy();
});
it('is not sour', () => {
expect(myBeverage.sour).toBeFalsy();
});
});
function sum(a, b) {
return a + b;
}
test('sum adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
或2)“风格测试,如:
const myBeverage = {
delicious: true,
sour: false,
};
describe('my beverage', () => {
it('is delicious', () => {
expect(myBeverage.delicious).toBeTruthy();
});
it('is not sour', () => {
expect(myBeverage.sour).toBeFalsy();
});
});
function sum(a, b) {
return a + b;
}
test('sum adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
文件:
它们做相同的事情,但它们的名称不同,因此它们与测试名称的交互也不同
测试
你写的是:
description('yourModule',()=>{
test('if it this',()=>{});
test('如果它做了另一件事',()=>{});
});
如果出现故障,您会得到什么:
yourModule>如果它做了这件事
it
你写的是:
description('yourModule',()=>{
它('应该做这件事',()=>{});
它('应该做另一件事',()=>{});
});
如果出现故障,您会得到什么:
yourModule>应该做这件事
因此,它是关于可读性,而不是功能性
在我看来,it
在阅读您自己没有编写的失败测试的结果时确实有一定的意义。这有助于更快地了解测试的内容
一些开发人员还将应该做这件事
缩短为做这件事
,这稍微短一点,在语义上也符合it
符号。Jest没有提到为什么它们有两个版本来实现完全相同的功能
我猜,这只是惯例<代码>测试
用于单元测试,它
用于集成测试。正如jest文档所说,它们是相同的:
测试(名称、fn、超时)
别名下还有:it(名称、fn、超时)
而description
仅适用于您希望将测试分组的情况:
描述(名称,fn)
descripe(name,fn)
创建一个块,将几个相关测试分组在一起。例如,如果您有一个myBeverage对象,它应该是美味而不是酸味的,您可以使用以下方法进行测试:
const myBeverage = {
delicious: true,
sour: false,
};
describe('my beverage', () => {
test('is delicious', () => {
expect(myBeverage.delicious).toBeTruthy();
});
test('is not sour', () => {
expect(myBeverage.sour).toBeFalsy();
});
});
这不是必需的-您可以直接在顶层编写测试块。但是,如果您希望将测试组织到组中,这将非常方便。您可以将其()替换为xit(),以临时排除正在执行的测试;使用it()和xit()比使用test()和xit()更有说服力
请参见
,它可能只是为了熟悉和从其他框架迁移而存在。没有区别。文档中明确说明test
位于别名it
下。您显示的代码并不表示it
和test
是同一件事。这只是意味着他们的类型是一样的。我不认为之前
和之后
是同一件事,即使它们的类型相同。xit和xtest
跳过测试,it、fit、test
执行测试。谢谢你的回答。有些人也更喜欢it('doesthing',()=>{})而不是it('shouldothing',()=>{}
作为它的简称,test('thingshouldox')
可能比it('shouldox')
更受欢迎,因为it
通常是模糊的。@mikemacana如果你写test('thing should do x')
你没有一个语义正确的句子。我认为这些符号背后的想法是,你可以像说话一样读句子中的测试。如果你写test('do this'),也一样
。当然你可以这样做,但是符号在语义上实际上适合它
符号测试('thing should do x')
是字面上的“testing that thing should do x'”,所以测试读起来就像一个人说的那样。test('thing does x'))
也很好。我认为这个答案有点误导-it
和test
不完全相同。正如@gwilde-answer中所解释的,这些别名鼓励开发人员将测试名称写成可读的英语句子-因此随机使用it
或test
会弄糟。