我正在尝试组织我的摩卡测试,以通过单独的测试运行程序进行运行。每当我运行测试时,console.log都会在顶层before
块中输出正确的连接,但是在随后的单独的必需文件it
块中将null输出之后。该挂钩正在执行,并且它正确设置了connection
变量,但是不知何故它没有传递给所需的文件。
为什么没有正确设置连接?令人困惑的是,根据我的调试器it
块是在before
钩子之前执行的,这与我看到的console.log
s的顺序相反
describe.only('test-suite', async () => {
let connection; // undefinded at this point
before(async () => {
connection = await getConnection();
console.log(connection); -> proper connection instance
});
after(async () => {
await closeConnection();
});
require('./some/test')(
connection
);
});
./ some / test.js
module.exports = async (
connection,
) => {
describe('my-method', async () => {
it('does things', async () => {
console.log(connection); // somehow undefined
});
});
};
答案 0 :(得分:0)
这是因为JS处理对对象的引用的方式。重新分配变量不仅会更改引用所指向的值,还会创建一个指向全新值的全新引用。
这是解决方法:
describe.only('test-suite', async () => {
let options = { connection: null};
before(async () => {
options.connection = await getConnection();
console.log(connection);
});
after(async () => {
await closeConnection();
});
require('./some/test')(
options
);
});
./ some / test.js
module.exports = async (
options,
) => {
describe('my-method', async () => {
it('does things', async () => {
console.log(options.connection);
});
});
};