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

Jasmine 2.0 async Beforeach不等待async完成

胡元明
2023-03-14

我正在使用Jasmine 2.0和require.js。当我将异步代码放入beforeach函数中时,我无法使异步测试正常工作。在异步调用完成之前,我的it语句仍在运行。

这是我的规格:

describe("App Model :: ", function() {
    var AppModel;

    beforeEach(function(done) {
        require(['models/appModel'], function(AppModel) {
            AppModel = AppModel;
            done();
        });
    });

    // THIS SPEC FAILS AND RUNS BEFORE ASYNC CALL
    it("should exist", function(done) {
        this.appModel = new AppModel()
        expect(this.appModel).toBeDefined();
        done();
    });

    // THIS SPEC PASSES
    it("should still exist", function(done) {
        require(['models/appModel'], function(AppModel) {
            this.appModel2 = new AppModel()
            expect(this.appModel2).toBeDefined();
            done();
        });
    });

});

当我在it中包含异步时,第一个规范失败,但第二个规范通过。

理想情况下,我希望异步之前的能够工作,而不是不干燥并将每个需求复制到单独的it语句中。

有什么建议吗?


共有1个答案

拓拔泓
2023-03-14

本地require var应该有另一个名称包装到外部作用域。此外,在“it”中,您不需要完成,它仅在异步部分。像这样的东西一定有用:

describe("App Model :: ", function() {
  var AppModel;

  beforeEach(function(done) {
    require(['models/appModel'], function(_AppModel) {
        AppModel = _AppModel;
        done();
    });
  });

  it("should exist", function() {
    var appModel = new AppModel()
    expect(appModel).toBeDefined();
  });

});
 类似资料:
  • 根据Espresso文档,检测测试应该自动等待完成。但它不起作用。我创建了这个简单的测试用例: 返回UI线程时测试应该失败,但它总是成功。这是测试的logcat输出: 正如您所看到的,测试在后台方法执行之前就已经完成了。我怎样才能让考试等待呢?

  • 我通读了Dart/flatter中的Async/Await/then,试图理解为什么aysnc函数中的Await不会等到完成后再继续。在我的UI中,有一个按钮调用一个异步方法来返回一个位置,该位置总是返回null,并且不等待函数完成。 该函数将调用推送到一个新的UI页面,该页面选择一个位置,并应返回一个结果。如何使该函数等待结果?我不是在使用异步吗?

  • 下面的函数在for循环中调用几个异步函数。它解析不同的CSV文件来构建单个JavaScript对象。我想在for循环完成后返回对象。它在执行异步任务时立即返回空对象。有道理,但是我尝试了各种Promise/异步 /await组合,希望在for循环完成后运行一些东西。我显然不明白发生了什么。对于这样的事情,有更好的模式吗?还是我想错了? 这是我用来调用函数的代码,希望用CSV数据填充我的“retCo

  • 问题内容: 我目前正在等待所有承诺按顺序完成,如下所示: 但是,通过这种方式,配置文件和令牌将顺序执行。由于两者彼此独立,因此我希望两者一起独立执行。我认为可以使用Promise.all完成此操作,但是我不确定语法,也找不到任何帮助。 所以我的问题是如何转换上面的api调用以一起运行,然后返回最终输出。 问题答案:

  • 问题内容: 我有一个登录框架,我必须从另一个线程等待。成功登录后,框架将自行处置。我想弹出该应用程序的主框架。现在,我正在观看一个布尔值,以确定何时启动主机。正确的做法是什么?观看布尔值只是感觉并不优雅。 问题答案: 如果您有Java 5或更高版本,则可以使用CountDownLatch。例如,假设主框架最初处于控制状态,则让主框架创建一个倒数为1的,然后将此锁存器传递给登录框架。然后让主机等待锁

  • 问题内容: 我有这个代码: 发生的是该文件在实际执行之前已删除。 这是因为文件仅包含本机系统调用吗?执行文件 后 如何删除?(我不知道文件的输出是什么,因为它是动态变化的)。 问题答案: 通过使用,您要求在后台启动批处理文件: 因此,您从Java()启动的进程将在后台进程完成之前返回。 删除命令以在前台运行批处理文件-然后,将等待批处理文件完成: 根据OP,重要的是要有可用的控制台窗口-这可以通过