如何在模块中测试 OpenCV nodejs 绑定代码

How to test OpenCV nodejs binding code in a module?

本文关键字:OpenCV nodejs 绑定 代码 测试 模块      更新时间:2023-09-26

我正在试验opencv,我刚刚创建了一个'人脸查找器'模块。

代码运行良好。但是,我的摩卡测试没有执行整个代码。

这是我的存储库:https://github.com/scaryguy/facefinder

当我运行此测试时:

describe('FaceFinder', function() {
    it('should work', function() {
        return FaceFinder('/Users/scaryguy/arge/opencv/facefinder/test/fixtures/childFaces.jpg', '/Users/scaryguy/arge/opencv/facefinder/')
    });
});

我的代码部分执行。

看看我在哪里注释了最后运行代码的行。

// https://github.com/scaryguy/facefinder/blob/master/lib/find.js
Find.prototype.image = function(cb) {
    var img = this;
    cv.readImage(img.image_path, function(err, im) {
        if (err) return cb(err, false);
// WHEN I console.log something here it's shown
        im.detectObject(cv.FACE_CASCADE, {}, function(err, faces) {
// BUT here is never run WHILE executing the test. 
            if (err) return cb(err, false);
            for (var i = 0; i < faces.length; i++) {
                var x = faces[i]
                im.ellipse(x.x + x.width / 2, x.y + x.height / 2, x.width / 2, x.height / 2);
            }
            im.save(img.output_name + ".jpg");
            console.log("Number of found faces: " + faces.length + "'n");
            cb(null, true);
        });
    })
}

奇怪的是,当我需要这个模块并运行代码时,它运行得很好。但它在测试时不起作用。而且没有错误。

有什么想法吗?

im.detectObject() 方法接受异步回调 - 即,它不会立即发生,而是在以后发生。

我不熟悉这个 OpenCV 库,但给定方法的名称 (detectObject),我猜这个方法只有在检测到cv.FACE_CASCADE Object时才会调用回调。

您的情况几乎可以肯定是这样的:

  • 运行模块时,检测到cv.FACE_CASCADE对象,并且代码将运行。
  • 运行测试时,没有要检测的cv.FACE_CASCADE,并且它不会运行(但不会导致错误)。