我正在尝试运行类似的东西
describe('REGISTRATION', async () => {
const response = await axios.post(url, params);
});
我下面有这样的代码
describe('REGISTRATION', () => {
// success registration, check expected fields
test('SUCCESS', async () => {
const response = await axios.post(url, params);
const { status, statusText } = response;
expect(status).toBe(200);
expect(statusText).toBe('OK');
const { jwt, user } = response.data;
expect(typeof(jwt)).toBe('string');
expect(user).toEqual({
id: expect.any(Number),
username: expect.any(String),
email: expect.stringMatching(emailRegExp),
});
});
});
这有效,但是当出现错误时,我没有得到详细信息,这使我出错。 我会得到类似的东西
expect(received).toEqual(expected) // deep equality
expect(user).toEqual({.......
所以我想对async
使用describe
是因为我想做类似的事情
describe('REGISTRATION', async () => {
const response = await axios.post(url, params);
const { status, statusText } = response;
const { jwt, user } = response.data;
test('id', () => {
expect(Number.isInteger(user.id)).toBe(true);
});
test('username', () => {
expect(typeof(user.username)).toBe('string');
});
test('email', () => {
expect(user.email).toEqual(expect.stringMatching(emailRegExp));
});
});
所以我可以在测试时详细了解每个错误。
有人知道这将如何工作吗?或者我想太多,这是另一种方法吗?
答案 0 :(得分:0)
尝试在“ it”上使用异步(并尝试阅读此帖子https://staxmanade.com/2015/11/testing-asyncronous-code-with-mochajs-and-es7-async-await/):
describe("REGISTRATION" , () => {
it("Using an async method with async/await!", async function() {
var result = await somethingAsync();
expect(result).to.equal(something);
});
});
另请参见https://mochajs.org/#asynchronous-code(有一个异步等待示例)
答案 1 :(得分:0)
因此,这里有一个有效的示例,我认为至少可以回答您有关如何查看异步调用详细信息的问题。
所以首先是jesting.js文件,这样您就可以看到即时消息仅返回Promises
const jesting = (()=>{
function sum(a, b){
return new Promise( (resolve)=>{
setTimeout(()=>{
resolve(a+b)
},2000)
})
}
function sub(a, b){
return new Promise( (resolve,reject)=>{
setTimeout(()=>{
resolve(a-b)
},2000)
})
}
return {
sum: sum,
sub: sub
}
})();
module.exports = jesting;
现在是jesting.test.js
const jesting = require('./jesting.js');
describe("STUFF", () => {
const standByMe = jesting.sum(3, 3)
test('a plus b is x', async () => {
expect(await standByMe).toBe(6);
})
test('a plus b is x', async () => {
expect(await standByMe).toBe(7);
})
test('a minus b is x', async () => {
expect(await jesting.sub(7, 2).then(res => { return res - 2 })).toBe(3);
})
})
现在会发生什么??
因此,描述将在开始时执行,standByMe
将被设置为包含一个Promise,该Promise将在2秒后解析为6,而且sub()
将返回一个诺言,该承诺将在2秒后解析为5但是我们想要3所以我们作弊:P
请注意,两个a + b测试await
都是相同的Promise,在您的情况下,这只是一个。正如您在sub中看到的那样,您也可以在收到响应后对其进行操作。 const standByMe = jesting.sum(3, 3).then(res=>{return res+1})
也是可行的,它将返回7的测试成功
结果
不支持async
回调中的哦和describe
,因此回答您的主要问题=>否,但在测试中是