问题描述
我正在尝试运行一个SSH到另一个本地设备的期望脚本,以安装并运行 python 脚本。 所有变量都在脚本之外定义:
set prompt "$SSHuser@$SSHname:~$"
spawn ssh -o \"StrictHostKeyChecking no\" $SSHuser@$SSHhost
expect
{
"*assword"
{
send "$SSHpassword\r"
exp_continue
}
"$prompt"
{
send "sudo su"
expect
{
"*assword"
{
send "$SSHpassword\r"
exp_continue
}
"$prompt"
{
send "apt update && apt upgrade -y && apt install net-tools -y && apt install python3-pip -y"
expect "$prompt"
{
send "wget -O script.py https://SOMEURL"
}
}
}
}
}
missing close-brace
while executing
"{"
Couldn't read file "sur
expect
{
*assword
{
send REDACTEDPASSWORD
exp_continue
}
{
send -- apt": no such file or directory
spawn ssh -o StrictHostKeyChecking no USERNAME@192.168.1.173
USERNAME@192.168.1.173's password:
我已经计算了方括号并使用了突出显示工具,但看不到任何遗漏的方括号。 我也不明白为什么它总是将“ send ”和“ sudo su \ r ”读为“ sur”。 我的期望值仍然很有限。 在理解这里出了什么问题方面,我将不胜感激。
解决方法
Tcl强制您使用the "one true brace style",因为换行符是命令终止符。
作为注释,期望代码不必如此深入地嵌套。该代码可以写为
jest.mock('fs');
jest.mock('axios');
jest.mock('./resource.util')
// ... other code ...
it('fetches successfully data from an URL',async () => {
const data = { status: 200,data: { pipe: () => 'data' } };
axios.mockImplementationOnce(() => data);
fs.createWriteStream.mockImplementationOnce(() => 'fs');
handleWriter.mockImplementationOnce(() => 'data'); //handle writer was extracted to a util file
const expectedJson = await downloadMtgJson();
expect(expectedJson).toEqual('data');
expect(axios).toHaveBeenCalledWith(
expect.objectContaining({ URL: 'https://unsplash.com/photos/AaEQmoufHLk/download?force=true' }),);
expect(axios).toHaveBeenCalledWith(
expect.objectContaining({ responseType: 'stream' }),);
});
本质上,每次生成或发送都应带有期望。