美文网首页
nodejs mock数据 单元测试

nodejs mock数据 单元测试

作者: 77652991a858 | 来源:发表于2021-06-09 16:41 被阅读0次

    nodejs 单元测试

    nodejs  koa 框架 实现Java 中mock+junit类似的单元测试。

    需要用到的包mocha+should+sinon+supertest

    1.首先需要实现登录功能,因为登录功能是个公共功能,所以写个公共模块。

    我们的项目会把登录信息放在cookie 中,所以每次都会检测cookie 中的信息是否正确

    function login(user) {

    //在登陆时会用到,所以要一直保持

        userBusCheck =sinon.stub(userBus,'check').returns(user);

    }

    function getRequest(user, callback) {

    let request;

    if (isLogin) {

    request =superTest(app.listen());

    //setTimeout(callback(request), 10);

        }else {

    request =superTest(app.listen());

    login(user);

    isLogin =true;

    }

    return callback(request);

    }

    上面的login 方法就是对真正的登录中的用户信息校验方法做了一个mock,每次当你通过http 请求调用后端的接口的时候,后端会解析你的cookie,检查你的cookie信息是否过期,检查你的信息是否在后端数据库中是否存在,sinon.stub(userBus,'check').returns(user); 表示当执行userBus.check()方法时,不会去执行具体的方法,而是直接返回你自己构造user对象,则直接验证登录通过了。也就可以访问到你的后端接口了

    supertest 写的单元测试整体结构就是before+describe+after 这种结构的。describe 中就是我们要写到单元测试的具体逻辑。

    一个describe 中可以写对一个接口的不同值的测试。describe 中的before 可以把这个接口中的涉及的数据库的或者第三方接口的通过sinon.stub 方法构造成返回假数据的形式。这样就能更加专注于逻辑功能的测试了,当然在after 方法中一定要把构造假值的对象释放掉,重复构造会报错的。

    describe('/statistics/matcher/list',function () {

    let matchDetailFindLimitOne;

    before((done) => {

    matchDetailFindLimitOne =sinon.stub(similarDetailsModel,'findLimit');

    const matcherDetailStatDataList =lodash.cloneDeep(questionMatchDetailListTest.questionMatcherDetailList);

    matchDetailFindLimitOne.returns({data:matcherDetailStatDataList,count:10});

    done();

    });

    it('配题师工作量统计,个人工作量统计列表查询',function (done) {

    request.get('/drm_api/v1/statistics/matcher/list?'+qs.stringify(query) )

    .set('Cookie',cookie)

    .set('Content-Type','application/json')

    .expect(200)

    .end((err, result) => {

    should.not.exists(err);

    result.body.code.should.equal(0);

    result.body.msg.should.equal('ok');

    result.body.data.list.length.should.equal(10);

    done();

    });

    });

    after((done) => {

    matchDetailFindLimitOne.restore();

    done();

    });

    });

    单元测试报告

    通过npm run test 开始跑所有的单元测试,通过npm run report 可以打开单元测试报告

    单元测试覆盖率用的是nyc 包,通过npm run  cov_report 可以打开单元测试覆盖率报告

    相关文章

      网友评论

          本文标题:nodejs mock数据 单元测试

          本文链接:https://www.haomeiwen.com/subject/djpeeltx.html