当前位置: 首页 > 知识库问答 >
问题:

为什么jasmine节点mongoose测试不按预期等待?

郭星文
2023-03-14

我正在编写一个简单的应用程序来保存和查找位置。我用的是猫鼬和茉莉节点。

用户CRUD测试工作符合预期。但是,我单独创建了用户来测试不同的自定义验证。我还通过清除集合并重新加载所有用户来启动测试,以确保在启动save/update/etc测试之前所有测试数据都是良好的。

对于位置,我也在做同样的事情,但我有几十个位置,我想使用数组加载它们。。。并在整个过程中测试负载,确保其正常工作。

如果我只做一个位置,它工作正常。不止一个,他们就失败了。

我知道我在这里遗漏了一些与异步相关的步骤,但我不是在寻找错误的术语,就是现在离它太近了,看不到我在这里犯的根本性的简单错误。

版本:

  • 猫鼬:3.6。16
  • 茉莉结:1.11。0
  • mongodb:2.4。五,

详细的测试。。。

it("creating location succeeds", function(done){

    for(var locIndex in testLocations) {
        locations.create(testLocations[locIndex], function(err, location){

            // console.log says location is undefined
            // unless there is only one location, then it works.

            expect(err ).toBeNull();
            expect(location.name ).toBe(testLocations[locIndex].name);
            done();
        });
    }
});

...和创建函数从一个单独的文件保存位置相关的函数。。。

exports.create = function(location, cb){
    var newLocation = new Location(location);
    // console.log says we make it into here...

    newLocation.save(function(err, newLocation){
        // ...but we never make it in here, except when there's only one location
        if (err) {
            cb(err, null);
        } else {
            cb(null, newLocation);
        }
    });
};

...还有一些测试地点。。。

var testLocations = [
    {
        "name" : "A Great Noodle Place",
        "street" : "1234 Elm Street",
        "city" : "Springfield",
        "phone" : "(123) 456-7890",
        "website" : "n00dlesrus.com",
        "district" : "Downtown"
    },
    {
        "name" : "Perfect Pizza Palace",
        "street" : "1234 Professor Ave",
        "city" : "Springfield"
        "phone" : "(321) 654-0987",
        "website" : "cheesegalore.com",
        "district" : "Uptown"
    }
]

谢谢

共有1个答案

司徒俊雄
2023-03-14

您正在循环中调用done()。所以它在第一次迭代中被调用。这就是为什么当只有1个时它会起作用。您可以尝试使用async,它将迭代列表并在完成时调用最终回调:

it("creating location succeeds", function(done){

    async.each(Object.keys(testLocation), function(key, callback){
        locations.create(testLocations[key], function(err, location){
            expect(err).toBeNull();
            expect(location.name).toBe(testLocations[key].name);
            callback();
        });
    }, function(err) {
        done();
    });
});
 类似资料:
  • 问题内容: 我将 Jasmine 和 Karma 一起使用,以测试基于 Angular 构建的应用程序。 我必须测试加载用户数据的服务,并且使用 $ httpBackend 模拟响应。但是,当我运行测试时,出现两个错误: 错误:没有等待刷新的请求! 错误:请求不满意:GET https://api.github.com/users/wilk 模块: 测试: 假设GITHUB_API_URL等于 ‘

  • 问题内容: 为什么以下失败? 什么是正确的测试方法? 问题答案: 对于 Expect ,将比较对象而不是它们的数据,在您的情况下,它是两个不同的数组。 使用以深深的比较值。查看此链接。 或者您可以使用来模拟与。 或者,您可能要检查一下 。 对于 声称 可以使用,链接。

  • 问题内容: 有谁知道这是否可能?大部分用于节点检查器的示例似乎都旨在调试调用的网页。我希望能够调试茉莉花节点测试。 问题答案: 我最终写了一个名为toggle的工具: 您可以将其放入单元测试中,例如: 然后运行测试,例如:node –debug myfile.js debug。如果运行调试切换,则将一直等到ctrl-c以外的任何内容。Ctrl- c退出。您也可以重新运行,这很好。 w0000t。

  • 我正在尝试解析下面的XML文件并基于它创建一个JTree。 “窗口01”将添加到根节点“对象列表”,但“页面01”节点不会显示在“窗口01”节点下。下面给出了使用的源代码。请帮忙!!! 这是主课。编译时不会显示错误或警告。

  • 我试图在我的Mongoose模型上测试我的自定义方法,但是我在测试模型中设置的值消失并使测试失败。测试看起来像这样: 我的模型声明包含以下内容: 当我运行测试时,我得到: 我在测试中设置了用户,所以返回值应该是用户数组。(它在当前状态下仍然无法通过测试,但理论上应该在取消注释第二个返回语句时通过。)相反,用户数组显示为空。 如何让测试模型中的值出现在我的自定义函数中?

  • 我在Spring Boot项目中使用Resilience4J调用REST客户机,如下所示: 看到示例中包含了一个回退方法,我决定添加它,尽管我并不真的想调用不同的方法,我只想再次调用我的原始方法。 不管怎样,我指定了一个回落: 现在,我看到回退方法被重试,但是每次都会抛出HttpServerErrorException,这意味着使用者将收到一个异常作为对其调用的响应。 谢谢