在初始函数调用之后运行Jasmine测试

Run Jasmine tests after initial function calls

本文关键字:运行 Jasmine 测试 之后 函数调用      更新时间:2023-09-26

我正在为Node.js API编写Jasmine测试。我试图测试创建用户功能。测试看起来像这样:

describe('User test', function() {
  describe('Post /api/saveUser'), function() {
    it('saves a new user', function(done) {
      request.post({url: 'http://website/api/saveUser', form:{email:testU.email, password:testU.password}, headers: {'authorization': adminU.jwt}}, function(err, res, body) {
        expect(res.statusCode).toBe(200);
      });
    });
  });
});

所以我需要验证规范中的管理用户(adminU),以获得在请求中传递的有效令牌。这是使用另一个端点完成的。

request.post({url: 'http://website/api/authenticate', form:{email:adminU.email, password: adminU.password}}, function(err, res, body) {
  adminUser.jwt = JSON.parse(res.body).token;
});

但是我怎么把这些结合起来呢?如果我将身份验证代码放置在用户测试块上方,则在收到来自身份验证端点的响应之前运行用户测试。显而易见的选择是将用户测试封装在身份验证api的回调中,但是当我运行测试时,Jasmine实际上并没有运行它们。

在Jasmine规范中使用回调结果的最佳方式是什么?

您需要等待,直到验证调用的请求完成。

it('saves a new user', function(done) {
    request.post({
        url: 'http://website/api/authenticate',
        form: {
            email: adminU.email,
            password: adminU.password
        }
    }, function(err, res, body) {
        adminUser.jwt = JSON.parse(res.body).token;
        request.post({
            url: 'http://website/api/saveUser',
            form: {
                email: testU.email,
                password: testU.password
            },
            headers: {
                'authorization': adminU.jwt
            }
        }, function(err, res, body) {
            expect(res.statusCode).toBe(200);
            done();
        });
    });
});

如果您在多个测试中需要令牌,我建议将其放在before块中。如果您这样做,jasmine在开始测试之前运行一次,并且您不必在每个测试用例中进行验证调用。

before(function(done){
    request.post({
        url: 'http://website/api/authenticate',
        form: {
            email: adminU.email,
            password: adminU.password
        }
    }, function(err, res, body) {
        if(err) done(err);
        adminUser.jwt = JSON.parse(res.body).token;
        done();
    });
});

另外,我推荐用于测试api的超测试。参见https://www.npmjs.com/package/supertest