Tim*_*Tim 3 javascript mocha.js
我想在执行测试之前先设置一些变量,我找到了这个解决方案,在每个套件之前而不是在每个测试之前运行 Mocha 设置
但是,我不知道如何将变量传递到我的回调中,他们这样做我会得到未定义
makeSuite('hello', (context) => {
it('should return', () => {
assert.strictEqual(1, 1)
})
})
makeSuite('world', (context) => {
it('should return', () => {
console.log(context) // undefined
assert.strictEqual(1, 1)
})
})
function makeSuite(name: string, cb: (context: any) => any) {
let age: string;
describe(name, () => {
beforeEach(() => {
age = '123'
})
cb(age);
})
}
Run Code Online (Sandbox Code Playgroud)
我想将变量传递给回调的原因是,我将有许多需要在beforeEach钩子上设置的私有变量,而且我不想为所有测试重复我的代码。
传递给的回调describe会立即调用,但稍后在测试执行时beforeEach调用您的钩子。所以 when被调用,has for value 。稍后设置为但之前已经获得了该值的副本,因此它无效。为了看到更改,您必须传递对对象的引用,然后对其进行变异。像这样的东西:cb(age)ageundefinedage"123"cbcb
makeSuite('world', (context) => {
it('should return', () => {
console.log(context.age)
})
})
function makeSuite(name, cb) {
describe(name, () => {
let context = {
age: undefined,
};
beforeEach(() => {
context.age = '123';
});
cb(context);
});
}
Run Code Online (Sandbox Code Playgroud)
(我已经删除了 TypeScript 类型注释,以便它作为纯 JavaScript 运行。无论如何,注释对于解决问题并不重要。)
| 归档时间: |
|
| 查看次数: |
3542 次 |
| 最近记录: |