小编Tam*_*lyn的帖子

如何等待测试库中不发生某些事情?

我想断言一个条件,我知道该条件不会立即为真,但在异步操作之后可能为真,此时测试应该失败。

假设我正在测试这个计数器组件:

function Counter() {
  const [value, setValue] = useState(1);
  function decrement() {
    if (value >= 0) { // <- off by one bug
      someAsyncAction().then(() => setValue(value - 1));
    }
  }
  return (
    <>
      Value is {value}
      <button onClick={decrement}>Decrement</button>
    </>
  );
}

Run Code Online (Sandbox Code Playgroud)

我可以编写此测试来检查该值不应低于零:

const button = screen.getByRole("button", { name: "Decrement" });
expect(screen.getByText("Value is 1")).toBeInTheDocument();

userEvent.click(button);
expect(await screen.findByText("Value is 0")).toBeInTheDocument();

userEvent.click(button);
// !!! wrong !!!
expect(screen.getByText("Value is 0")).toBeInTheDocument();
expect(screen.queryByText("Value is -1")).not.toBeInTheDocument();
// !!! wrong !!!
Run Code Online (Sandbox Code Playgroud)

但是最后两个断言总是会通过,即使组件有一个错误,这意味着它将异步更新以显示“值是-1”。

处理这种情况的推荐方法是什么?

jestjs react-testing-library testing-library

7
推荐指数
2
解决办法
2793
查看次数

纯PHP中远程服务器的镜像文件夹

我想让一台机器上的文件夹与另一台机器上的文件夹同步.这是一个WordPress部署插件,所以我不能依赖于任何一台机器上的rsync或其他命令.PHP和Web服务器将在两台机器上都可用,理想情况下它可以通过HTTP工作.

我目前的想法是请求机器将具有最后修改日期的本地文件列表发布到另一台机器上的脚本.另一台机器与其文件进行比较,并使用修改后的文件进行响应 - 要么单独提取文件列表,要么在响应中内联更改的文件.

不过,如果存在,我宁愿使用现有的解决方案.有任何想法吗?

php rsync sync mirroring

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

是的,i18n 不能正常工作

我有这段代码。我想根据用户的语言环境添加错误消息,但是会抛出错误,如果字段填写不正确,也会引发错误

[缺少“en.login.emailRequiredError”翻译] [缺少“en.login.passRequiredError”翻译]

const schema = yup.object().shape({
  email: yup
      .string()
      .email(i18n.t('login.emailSpellError'))
      .required(i18n.t('login.emailRequiredError')),
  password: yup
      .string()
      .matches(/^((?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,15})$/i, i18n.t('login.passSpellError'))
      .required(i18n.t('login.passRequiredError')),
});
Run Code Online (Sandbox Code Playgroud)

i18n.t('login.passRequiredError') 当我把它放入一个渲染方法来检查它时工作正常,但它不适用于 yup。有什么建议?提前致谢

localization internationalization reactjs react-native yup

6
推荐指数
3
解决办法
5931
查看次数

如何检查 React 元素是否会渲染任何内容

假设我正在制作一个包装器组件,它只在传入一些子节点时才呈现自身:

const Wrapper = ({children}) => {
  if (!children) return null
  return <div>{children}</div>
}
Run Code Online (Sandbox Code Playgroud)

问题是它children可能是Fragment包含空值或空值数组。或包含片段的片段包含...

<Wrapper>hey</Wrapper> // renders <div>hey</div> 
<Wrapper>{null}</Wrapper> // renders nothing 
<Wrapper>{[null]}</Wrapper> // renders <div/> 
<Wrapper><React.Fragment>{null}</React.Fragment></Wrapper> // renders <div/> 
Run Code Online (Sandbox Code Playgroud)

有没有一种规范的方法来检查所有这些条件?

reactjs react-fragment

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

如何关闭PDO句柄

我正在使用PDO访问PHP中的两个SQLite 3数据库.我想在查询期间通过重命名来切换数据库文件,但是当文件打开时我不能这样做,因为它给出了另一个进程正在使用该文件的错误.我试过关闭持久连接并将句柄设置为null但是都不起作用.

是否真的无法关闭PDO句柄并释放数据库文件上的锁?

php sqlite pdo

5
推荐指数
2
解决办法
9727
查看次数

使用Doctrine2管理模式更改的工作流程

在开发过程中,我schema:update经常运行Doctrine的命令来将数据库模式同步到我不断变化的实体定义.一旦我准备提交功能,我想将所有更改汇总到一个我可以提交给git 的迁移类中.

问题是,为了运行,migrations:diff我需要在我开始搞乱之前将数据库模式回滚到其状态schema:update.这样做schema:dropmigrations:migrate是没有好,因为下降的架构不会删除migration_versions表.这意味着我必须进入MySQL并手动删除所有数据库,然后再运行现有的迁移并创建新的迁移.

它有效,但感觉我做错了.有更好的想法吗?

php doctrine database-schema doctrine-orm doctrine-migrations

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

PhantomJS:当HTML有资源时,setContent不起作用

这个脚本有效:

var page = require('webpage').create(); 

var html = '<h1>Test</h1><img>'; //works with page.setContent and page.content
//var html = '<h1>Test</h1><img src=".">'; //only works with page.content

page.setContent(html, 'http://github.com');
//page.content = html;

page.render('test.png');
phantom.exit();
Run Code Online (Sandbox Code Playgroud)

但是添加一个src属性img使其无声地失败(page.render返回false并且不生成图像).

设置page.content直接适用于两种情况,但相对URL则不然.加载资源的其他标签也会发生同样的事情link.链接资源是否存在无关紧要.测试1.8.1和1.9.2.

这是一个错误还是我误解了API?

html phantomjs

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

ThreeJS几何翻转

我正面临着几何翻转的问题,我尝试使用负刻度技术翻转,但它失败了.

我可以使用什么技术在特定轴上翻转3d对象?

通过翻转我的意思是对象应该看起来像在镜子上呈现.

如果通过three.js无法实现这一点,我怎样才能使用Blender实现这一目标?

3d three.js

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

为什么 Jest 仍然需要一个模拟模块?

我正在使用 Jest 模拟一个模块,因为它包含不应在测试中运行的代码。不过,我可以从输出模块中的代码中看到的正在运行。

// foo.js
console.log('Hello')

// test.js
jest.mock('./foo')
const foo = require('./foo')

test.todo('write some tests')
Run Code Online (Sandbox Code Playgroud)

控制台输出

PASS  test.js
  ? todo 1 test

console.log foo.js:1
Hello
Run Code Online (Sandbox Code Playgroud)

那是怎么回事?

javascript mocking node-modules jestjs

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

在 WebAssembly 中同时使用 32 位和 64 位数字的理由是什么?

WebAssembly 只有四种值类型:

\n\n
    \n
  • i32\xe2\x80\x93 32 位整数
  • \n
  • f32\xe2\x80\x93 32 位浮点数
  • \n
  • i64\xe2\x80\x93 64 位整数
  • \n
  • f64\xe2\x80\x93 64 位浮点数
  • \n
\n\n

每个都有自己的一组表示算术运算的操作码,例如i32.add、和。还有一些操作码用于将较窄的整数包装为较宽的类型,例如,i64.addf32.addf64.addint32.store_8int64.load32_u。WebAssembly v1 定义了约 170 个操作码,其中约 70 个专门用于 32 位数字,约 75 个用于 64 位数字。

\n\n

在我看来,放弃对 32 位数字的支持几乎可以将操作码的数量减半,而不会损失任何功能。这让我想知道:两者兼有有什么好处?

\n\n

GitHub 上有一些关于此问题的 讨论,但它们对我来说有点太技术性了。

\n

32bit-64bit webassembly

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