代码之家  ›  专栏  ›  技术社区  ›  user1283776

jest测试是否等待以前的异步测试来解决?

  •  2
  • user1283776  · 技术社区  · 7 年前

    done 应使用参数。

    import Client from '../Client';
    import { Project } from '../Client/types/client-response';
    
    let client: Client;
    
    beforeAll(async () => {
        jest.setTimeout(10000);
        client = new Client({ host: 'ws://127.0.0.1', port: 8080 , logger: () => {}});
        await client.connect();
    })
    
    
    describe('Create, save and open project', () => {
        let project: Project;
        let filename: string;
    
        beforeAll(async () => {
            // Close project
            let project = await client.getActiveProject();
            if (project) {
                let success = await client.projectClose(project.id, true);
                expect(success).toBe(true);
            }
        })
    
        test('createProject', async () => {
            project = await client.createProject();
            expect(project.id).toBeTruthy();
        });
    
        test('projectSave', async () => {
            filename = await client.projectSave(project.id, 'jesttest.otii', true);
            expect(filename.endsWith('jesttest.otii')).toBe(true);
        });
    
        test('projectClose', async () => {
            let success = await client.projectClose(project.id);
            expect(success).toBe(true);
        });
    
        test('projectOpen', async () => {
            project = await client.openProject(filename);
            expect(filename.endsWith('jesttest.otii')).toBe(true);
        });
    })
    
    afterAll(async () => {
        await client.disconnect();
    })
    
    2 回复  |  直到 7 年前
        1
  •  2
  •   skyboyer    7 年前

    当然,这取决于配置的测试运行器。表示赞成 Jasmine2 it seems impossible 要同时运行测试,请执行以下操作:

    由于javascript是单线程的,所以不可能在单个浏览器窗口中并行运行测试

    但是调查 docs' config section :

    --最大并发=

    --maxWorkers=| 别名:-w。指定工作池将为运行测试生成的最大工作线程数。这默认为计算机上可用的内核数。在资源有限的环境(如CIs)中调整这一点可能很有用,但默认值应该适合大多数用例。

    对于具有可变CPU的环境,可以使用基于百分比的配置:--maxWorkers=50%

    另外,请看以下内容的描述: jest-runner-concurrent :

    Jest的默认运行程序对每个测试文件使用一个新的child_进程(也称为worker)。虽然工作人员的最大数量是可配置的,但运行大量工作人员的速度很慢,并且会消耗大量内存和CPU。

    所以看起来您可以配置并行运行的测试文件的数量( maxWorkers )以及单个工作人员范围内的并发测试用例( maxConcurrency jest 作为测试跑步者。而这只会影响 test.concurrent()

    test.concurrent() 在他们的主文档站点。

    无论如何,您可以自己对照您的环境进行检查:

    describe('checking concurrent execution', () => {
        let a = 5;
    
        it('deferred change', (done) => {
            setTimeout(() => { 
                a = 11;
                expect(a).toEqual(11); 
                done();
            }, 1000);
        });
    
        it('fails if running in concurrency', () => {
            expect(a).toEqual(11);
        });
    })
    

    describe , it

        2
  •  2
  •   Brian Adams    7 年前

    从…起 the docs :

    …默认情况下,Jest按照在收集阶段遇到的顺序连续运行所有测试,等待每个测试完成并整理好后再继续。

    那么一会儿 Jest 可能运行 默认情况下,它并行运行 文件中的测试 连续地。

    该行为可通过以下测试进行验证:

    describe('test order', () => {
    
      let count;
    
      beforeAll(() => {
        count = 0;
      })
    
      test('1', async () => {
        await new Promise((resolve) => {
          setTimeout(() => {
            count++;
            expect(count).toBe(1);  // SUCCESS
            resolve();
          }, 1000);
        });
      });
    
      test('2', async () => {
        await new Promise((resolve) => {
          setTimeout(() => {
            count++;
            expect(count).toBe(2);  // SUCCESS
            resolve();
          }, 500);
        });
      });
    
      test('3', () => {
        count++;
        expect(count).toBe(3);  // SUCCESS
      });
    
    });