小编SHe*_*dez的帖子

测试JavaScript中是否未定义某些内容

我正在检查if(response[0].title !== undefined),但是我得到了错误:

未捕获的TypeError:无法读取未定义的属性"title".

javascript undefined

221
推荐指数
5
解决办法
28万
查看次数

在"一切都已完成"之后退出node.js脚本的好方法是什么?

我的node.js脚本从数据库1中的表中读取行,进行一些处理并将行写入数据库2.

一切都完成后,脚本应该退出.

我怎么知道是否所有事情都已完成并退出节点呢?

如果我有这样的回调函数:

function exit_node() {
  process.exit();
}
Run Code Online (Sandbox Code Playgroud)

(编辑:同时很明显,process.exit()也可以用db.close()替换 - 但这不是要放在那里的问题.问题是在哪个时候准确地做到这一点,即如何以及在何处执行此回调.)

但要在某个地方附上它并不容易.从db1最后一次读取后不正确,因为处理和写入仍然必须发生.

将它附加到对db2的写入并不容易,因为它必须在最后一次写入后附加,但每次写入都是独立的,并且不知道它是否是最后一次写入.

它理论上也可能发生,最后一次写入完成,但在此之前的另一次写入仍在执行.


编辑:对不起,我可以看到问题的解释不完整,可能令人困惑,但有些人仍然理解,下面有很好的答案.请继续阅读评论和答案,它应该给你全面的了解.


编辑:我可以想到一些"阻塞"控制器机制.脚本的不同部分为每个打开的"作业"向控制器添加阻止程序,并在作业完成后释放它们,并且当不再存在bocker时控制器退出脚本.也许async可以提供帮助:https://github.com/caolan/async

我也担心这会破坏代码和逻辑不合理.

asynchronous control-flow node.js

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

pytest - 如何使用全局/会话范围的灯具?

我希望有一个"全局固定"(在pytest中它们也可以称为"会话范围固定装置"),它可以进行一些昂贵的环境设置,例如通常准备资源,然后在测试模块之间重复使用.设置是这样的,

shared_env.py

会有一个夹具做一些昂贵的东西,比如启动Docker容器,MySQL服务器等.

@pytest.yield_fixture(scope="session")
def test_server():
    start_docker_container(port=TEST_PORT)
    yield TEST_PORT
    stop_docker_container()
Run Code Online (Sandbox Code Playgroud)

test_a.py

会使用服务器,

def test_foo(test_server): ...
Run Code Online (Sandbox Code Playgroud)

test_b.py

会使用相同的服务器

def test_foo(test_server): ...
Run Code Online (Sandbox Code Playgroud)

似乎pytest支持这个过程scope="session",但我无法弄清楚如何使实际的导入工作.当前设置将给出错误消息,如,

fixture 'test_server' not found
available fixtures: pytestconfig, ...
use 'py.test --fixtures [testpath] ' for help on them
Run Code Online (Sandbox Code Playgroud)

python integration-testing pytest

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

如何在开发中的SLIME中快速重新加载和重新启动

我开始使用emacs和slime来开发一些小服务.

我找到了一种在更改后重新加载代码的方法,但我希望这更方便,更快捷.

这就是我现在的做法:

  • 1)启动emacs,启动粘液,然后在粘液中:

    2)(加载"init.lisp"); 加载一些不会改变的初始化代码

    3)(加载"myseervice.lisp"); 这包含了我正在处理的代码

    4)(myservice:start)

    5)此时看门人正在运行,我可以测试它.然后我对myseervice.lisp进行了修改,以修改它.要将代码交换到新版本,我执行此操作:

    6)(myservice:停止)

    7)(加载"myservice.lisp")

    8)转到4)重新开始...


这项工作到目前为止.但手动停止,重新加载和启动并不好玩.并且在调用之间的粘液中有很多输出,因此重用以前键入的命令并不容易4)-7).

为了得到一个解决方案,我启动了一个devhelper包,它应该只在一个命令中为我做这个,但它不起作用:

(defpackage :devhelper
  (:use :common-lisp :myservice)
  (:export :start :reload))

(in-package :devhelper)

(defun start ()
  (myservice:start))

(defun reload ()
  (myservice:stop)
  (load "myservice.lisp") ;I think it is not possible to load it here, 
                          ;because this module is using the file that it is just loading
                          ;But it does not have to work this way, 
                          ;I just like any good solution
  (myservice:start))
Run Code Online (Sandbox Code Playgroud)

我想我现在可以这样做:

  • 1)启动emacs,启动粘液,然后在粘液中:

    2)(加载"init.lisp"); 加载一些不会改变的初始化代码

    3a)(加载"myseervice.lisp"); 这包含了我正在处理的代码

    3b)(加载"devhelper.lisp") …

lisp emacs sbcl common-lisp slime

4
推荐指数
1
解决办法
1278
查看次数