小编pyn*_*exj的帖子

开玩笑,如何使用“toHaveBeenCalledWith”并仅匹配数组参数中对象的一部分?

我正在使用 Typescript 和 Jest。在开玩笑中,如果我想检查我的函数是否被调用,我可以运行

expect(myMockFn).toHaveBeenCalledWith(arrayArgument);
Run Code Online (Sandbox Code Playgroud)

我想检查我的函数是否是使用包含具有某些值的对象的数组参数调用的。例如,

expect(myMockFn).toHaveBeenCalledWith( [{x: 2, y: 3}] );
Run Code Online (Sandbox Code Playgroud)

实际的调用是使用如下所示的参数进行的

[{x: 2, y: 3, id: 'some-guid'}]
Run Code Online (Sandbox Code Playgroud)

所以我的期望失败了,因为我在数组的第一个对象中没有 id 属性,但我想匹配并忽略 ID,因为它每次都会不同,即使其他参数相同。如何使用 Jest 构建这样的 Expect 调用?

mocking jestjs ts-jest

32
推荐指数
1
解决办法
5万
查看次数

Expect中"send_user"和"puts"之间有什么区别吗?

我已经使用了Expect几年了,但是我还不清楚它是否send_user与它相同puts.每当我想向用户发送信息性消息时,我想知道应该使用哪一个.从Expect的手册页看,它似乎send_user是相同的,puts但后来send_user用于什么?

tcl expect

20
推荐指数
2
解决办法
2万
查看次数

调用setsockopt时出错"No such device"

我有一个代码,其中发送多播数据报.一段重要的代码:

uint32_t port;
int sockfd, err_ip;
const uint32_t sizebuff = 65535 - (20 + 8);
unsigned char *buff = (unsigned char *) malloc(sizebuff);
struct sockaddr_in servaddr, cliaddr;
struct in_addr serv_in_addr;
struct ip_mreq req;

port = str2uint16(cmdsrv->ipport);
bzero(buff, (size_t)sizebuff);
bzero(&servaddr, sizeof(servaddr));
bzero(&serv_in_addr, sizeof(serv_in_addr));
err_ip = inet_aton(cmdsrv->ipaddr, &serv_in_addr);

if(( err_ip != 0 ) && ( port != 0 )) {
   servaddr.sin_family = AF_INET;
   servaddr.sin_addr = serv_in_addr;
   servaddr.sin_port = htons(port);
   memcpy(&req.imr_multiaddr,&serv_in_addr,sizeof(req.imr_multiaddr));
   req.imr_interface.s_addr = INADDR_ANY;
   sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

   if( sockfd == -1 …
Run Code Online (Sandbox Code Playgroud)

c sockets udp multicast setsockopt

11
推荐指数
1
解决办法
2万
查看次数

期望断言类型错误 - > expect(...).toExist不是函数

我正在测试一个nodejs应用程序.我在运行测试时发现此错误的位置.测试脚本如下:

.expect( (res) => {
    expect(res.headers['x-auth']).toExist();
    expect(res.body._id).toExist();
    expect(res.body.email).toBe(email);
})
Run Code Online (Sandbox Code Playgroud)

错误显示:

TypeError: expect(...).toExist is not a function
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?TIA.

mocha.js node.js

11
推荐指数
1
解决办法
6937
查看次数

什么是"ANSI_X3.4-1968"编码?

请参阅我的系统上的以下输出:

[STEP 101] # python3 -c 'import sys; print(sys.stdout.encoding)'
ANSI_X3.4-1968
[STEP 102] #
[STEP 103] # locale
LANG=C
LANGUAGE=en_US:en
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C
[STEP 104] #
Run Code Online (Sandbox Code Playgroud)

谷歌搜索但发现很少有关于它的信息.甚至Python的Python库参考(v3.5.2)也没有提到它.任何国际标准都定义了它?


(从接受的答案评论中复制权威参考:字符集)

python python-3.x python-unicode

11
推荐指数
2
解决办法
6983
查看次数

如何在 macOS 上安装和使用 GNU "ls"?

我正在关注这篇文章来更新我的 bash。我真的很想更新我的 bash 版本,以便我可以使用命令的--group-directories-first选项ls

到目前为止,我已经从链接的文章中完成了以下内容:

  • 我成功执行了brew install bash命令并下载了新的 bash。根据文章,我可以验证/usr/local/bin/bash --version我机器上的 显示以下内容:

    GNU bash,版本 5.0.11(1)-release (x86_64-apple-darwin18.6.0) 版权所有 (C) 2019 Free Software Foundation, Inc. 许可证 GPLv3+:GNU GPL 版本 3 或更高版本http://gnu.org/licenses /gpl.html

    这是免费软件;您可以自由更改和重新分发它。在法律允许的范围内,不提供任何保证。

    • 我完成了sudo vim /etc/shells命令,编辑了文件以包含新下载的 bash。这是它的样子:

在此处输入图片说明

  • 我执行了chsh -s /usr/local/bin/bash将新的 bash 设置为默认值。

但是,即使在我关闭终端并重新启动它之后,我也不确定我是否在使用新终端。这是因为:

  1. 当我执行时,bash --version我得到以下信息:

    GNU bash,版本 5.0.11(1)-release (x86_64-apple-darwin18.6.0) 版权所有 (C) 2019 Free Software Foundation, Inc. 许可证 GPLv3+:GNU GPL 版本 3 或更高版本http://gnu.org/licenses /gpl.html

    这是免费软件;您可以自由更改和重新分发它。在法律允许的范围内,不提供任何保证。

但是当我跑步时, …

directory macos homebrew ls gnu

9
推荐指数
1
解决办法
5305
查看次数

Github Actions:为什么 shell 脚本中的中间命令失败会导致整个步骤失败?

我在 Github Actions 工作中有一个步骤:

      - name: Check for changes
        run: |
          diff=$( git diff --name-only 'origin/main' )
          changed_files=$( echo $diff | grep -c src/my_folder ) # this fails

          # more script lines
          # that are unrelated
Run Code Online (Sandbox Code Playgroud)

Error: Process completed with exit code 1. 仅当 grep 找不到任何内容时才会失败。如果 中有匹配项$diff,则此步骤按预期进行。但当然它也需要在没有匹配的情况下工作。

我可以在本地或在脚本内运行它,没有问题,退出代码总是0(在 Mac 上)。

我不明白问题是什么。经过几个小时的反复试验和研究,我了解到这grep在 Github 操作中显然很棘手,但我没有找到任何提示或适当的文档,我应该如何解决这个确切的情况。

如果我将失败的线路更改为

echo $( echo $diff | grep -c src/my_folder ) # this works and prints out the result
Run Code Online (Sandbox Code Playgroud)

这可以毫无问题地执行。

但是,即使没有发现任何结果,如何将 …

bash continuous-integration grep github-actions

9
推荐指数
1
解决办法
4166
查看次数

为什么"foo \\ <NEWLINE> bar"在"gcc -E"之后成为"foo\bar"?

请参阅以下示例:

$ cat foo.c
int main()
{
    char *p = "foo\\
bar";
    return 0;
}
$ gcc -E foo.c
# 1 "foo.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "foo.c"
int main()
{
    char *p = "foo\bar";

    return 0;
}
$
Run Code Online (Sandbox Code Playgroud)

根据我的理解,第二个\被第一个逃脱,\因此第二个\不应该与以下相结合<NEWLINE>以形成线延续.

c

8
推荐指数
2
解决办法
829
查看次数

使用scatter-gather处理短读/写的技术?

Scatter-gather - readv()/ writev()/ preadv()/ pwritev() - 在单个系统调用中读/写可变数量的iovec结构.基本上它从第0个iovec到第N个顺序读/写每个缓冲区.但是根据文档,它在readv/writev调用上的返回次数也少于请求的次数.我想知道是否有一种标准/最佳实践/优雅方式来处理这种情况.

如果我们只是处理一堆字符缓冲区或类似的东西,这不是什么大问题.但其中一个细节是使用分散 - 聚集结构和/或离散变量作为单独的iovec项目.你如何处理readv/writev只读取/写入结构的一部分或长的一半或类似的情况.

以下是我得到的一些人为的代码:

int fd;

struct iovec iov[3];

long aLong = 74775767;
int  aInt  = 949;
char aBuff[100];  //filled from where ever

ssize_t bytesWritten = 0;
ssize_t bytesToWrite = 0;

iov[0].iov_base = &aLong;
iov[0].iov_len = sizeof(aLong);
bytesToWrite += iov[0].iov_len;

iov[1].iov_base = &aInt;
iov[1].iov_len = sizeof(aInt);
bytesToWrite += iov[1].iov_len;

iov[2].iov_base = &aBuff;
iov[2].iov_len = sizeof(aBuff);
bytesToWrite += iov[2].iov_len;

bytesWritten = writev(fd, iov, 3);

if (bytesWritten == -1)
{
    //handle error
}

if …
Run Code Online (Sandbox Code Playgroud)

c unix linux

7
推荐指数
1
解决办法
3097
查看次数

在expect脚本中发送INSERT和F12

我知道为了在expect脚本中发送return,我会这样做:

send -- "\r"
Run Code Online (Sandbox Code Playgroud)

什么是INSERTF12键的发送命令?我已经在线查看,无法在任何地方找到它.

unix bash expect

6
推荐指数
1
解决办法
127
查看次数