Jasmine - 多个它,一个异步调用
Jasmine - Multiple it's, one asynchronous call
场景
我试图在单个外部负载上执行多个 it
规范,而不是每次都加载外部数据。
问题
如何在保持我的 it
定义的情况下通过一次调用 getExternalValue
来做到这一点?
想法
目前我正在一个 it
块中完成所有 expect
。我也考虑过在测试之前存储加载的值,但是我必须找到另一种方法让 jasmine 等待直到加载值。
代码
function getExternalValue(callback) {
console.log("getting external value");
setTimeout(function() {
callback(true);
}, 2000);
return false;
}
describe("mjaTestLambda()", function() {
it("is truthy", function(done) {
let truthy;
truthy = getExternalValue(function(bool) {
truthy = bool;
expect(truthy).toBeTruthy();
done();
});
});
it("is falsy", function(done) {
let truthy;
truthy = getExternalValue(function(bool) {
truthy = bool;
expect(!truthy).toBeFalsy();
done();
});
});
});
How can I do this with a single call of getExternalValue while still
keeping my it definitions?
使用beforeEach()
或beforeAll()
获取解析值。我个人建议 beforeEach() 因为它将重置每个测试的值并有助于确保每个测试的干净设置。
我注意到你的函数有一个回调参数。 Async/await 是一种有用的模式,在 (1) 您正在编写 async/await 函数或 (2) 您的函数 return Promise 时效果最佳。如果您需要保留回调参数,请告诉我,我将更新以下内容:
// returns Promise
function getExternalValue() {
return new Promise((resolve, reject) => {
console.log("getting external value");
setTimeout(() => {
resolve(true);
}, 2000);
});
}
describe("mjaTestLambda()", () => {
let value;
beforeAll(() => {
return getExternalValue()
.then((v) => { value = v; });
});
it("is truthy", () => {
expect(v).toBeTruthy();
});
it("is not falsy", () => {
expect(!v).toBeFalsy();
});
});
场景
我试图在单个外部负载上执行多个 it
规范,而不是每次都加载外部数据。
问题
如何在保持我的 it
定义的情况下通过一次调用 getExternalValue
来做到这一点?
想法
目前我正在一个 it
块中完成所有 expect
。我也考虑过在测试之前存储加载的值,但是我必须找到另一种方法让 jasmine 等待直到加载值。
代码
function getExternalValue(callback) {
console.log("getting external value");
setTimeout(function() {
callback(true);
}, 2000);
return false;
}
describe("mjaTestLambda()", function() {
it("is truthy", function(done) {
let truthy;
truthy = getExternalValue(function(bool) {
truthy = bool;
expect(truthy).toBeTruthy();
done();
});
});
it("is falsy", function(done) {
let truthy;
truthy = getExternalValue(function(bool) {
truthy = bool;
expect(!truthy).toBeFalsy();
done();
});
});
});
How can I do this with a single call of getExternalValue while still keeping my it definitions?
使用beforeEach()
或beforeAll()
获取解析值。我个人建议 beforeEach() 因为它将重置每个测试的值并有助于确保每个测试的干净设置。
我注意到你的函数有一个回调参数。 Async/await 是一种有用的模式,在 (1) 您正在编写 async/await 函数或 (2) 您的函数 return Promise 时效果最佳。如果您需要保留回调参数,请告诉我,我将更新以下内容:
// returns Promise
function getExternalValue() {
return new Promise((resolve, reject) => {
console.log("getting external value");
setTimeout(() => {
resolve(true);
}, 2000);
});
}
describe("mjaTestLambda()", () => {
let value;
beforeAll(() => {
return getExternalValue()
.then((v) => { value = v; });
});
it("is truthy", () => {
expect(v).toBeTruthy();
});
it("is not falsy", () => {
expect(!v).toBeFalsy();
});
});