我已经制作了一个express应用程序,这基本上是一个RESTAPI,我已经为该应用程序在mocha中编写了测试。现在我想突变测试我的应用程序,但我遇到了一个问题。我的应用程序通过express的app.listen( 8000 )命令监听端口8000,我的测试通过我设置的路由(例如localhost:8000/ test )测试应用程序。当我尝试使用stryker进行突变测试时,我遇到的问题是,每个创建的突变体都会在测试的同时尝试访问端口8000,并且由于"EADDRINUSE: adress已在使用中:8000“而导致100%的突变得分,导致突变体被杀死。我已经尝试在package.json中将测试脚本从"mocha“编辑为"mocha --exit”,并在最后一次测试结束后关闭服务器。
我认为,通过使用express创建一个简单的API,然后编写使用这些路由的测试,并尝试使用stryker对其进行突变测试,可以很容易地重现这个错误。有没有解决这个问题的办法,欢迎大家帮忙!
发布于 2021-09-20 15:23:19
在Stryker中还有一个选项,您可以将并发测试(并发)设置为1,以使测试引擎一次只运行一个测试。这对于测试来说会很慢,但应该可以工作。
我使用NestJS作为我的应用编程接口应用程序的框架。在那里,我可以使用NestJS的测试模块在内部启动应用程序。你们有类似的东西吗?
在我的例子中,我能够在beforeAll()方法中单独启动应用程序,然后运行测试。
beforeAll(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule],
}).compile();
app = moduleFixture.createNestApplication();
await app.init();
});
...
it('/bad (GET) address should be Not Found', async () => {
const ResponseData$ = await request(app.getHttpServer()).get('/bad');
expect(ResponseData$.body.statusCode).toBe(404);
expect(ResponseData$.body.message).toBe('Cannot GET /bad');
});这是一个简单的测试,但在我的测试中,app.getHttpServer()是启动内部调用的关键,它不需要应用程序在端口上运行,因为测试模块已经支持这一点。
这允许我以并行执行的方式运行所有测试,也允许Stryker并行运行。
https://stackoverflow.com/questions/69237439
复制相似问题