【问题标题】:How correct cover this test case in Hapi.js Lab?在 Hapi.js Lab 中如何正确覆盖这个测试用例?
【发布时间】:2016-05-26 13:32:56
【问题描述】:

我的 Hapi.Js 服务器中有文件上传 POST 点。 下面是代码:

 server.route([{
 method: 'PUT',
 path: '/upload/{id}',
 config: {
     handler: function(req,res) {
         async.waterfall([
             function checkEntityInDbExists(req.params.id,callback) {
                 ...
                 callback(null, entityId);
             },
             function uploadPictureToAWS(entityId, callback) {
                 ...
                 callback(null, imageLink);
             },
             function savePictureLinkInDbEntity(entityId, callback) {
                 ...
                 callback(null, imageLink);
             }
         ], function(err, result) {
             if (err) {
                 return reply(err);
             }
             return reply(result);
         });
     }
 }

}]);

如何正确覆盖此代码/点的“应返回上传的图像路径”的情况,而不影响 DB 和 AWS?

【问题讨论】:

    标签: node.js unit-testing sinon hapijs lab


    【解决方案1】:

    我认为您可能需要像 proxyquire 这样的包来帮助您模拟方法并使其返回有效结果,以便您的逻辑可以继续。

    使用示例(来自Async-Hapi-Test-Example):

    var assert = require("assert");
    var chai = require("chai");
    var sinon = require("sinon");
    var sinonChai = require("sinon-chai");
    var proxyquire = require("proxyquire").noCallThru();
    var expect = chai.expect;
    
    chai.should();
    chai.use(sinonChai);
    
    describe("Testing route index", function() {
        var sut;
        var db;
        var aws;
        beforeEach(function() {
            db = {
                check: sinon.spy(),
                savePic: sinon.spy(function(){ return "a link?"; })
            }
            aws = {
                upload: sinon.spy()
            }
            sut = proxyquire('./index', {"./db": db, "./aws": aws});
        });
    
        describe("upload", function() {
            it("should pass", function(done){
                var request = {
                    params: {
                        id: 9001
                    }
                }
                var reply = function(results) {
                    results.should.equal('a link?');
                    db.check.should.been.calledOnce;
                    db.savePic.should.been.calledOnce;
                    aws.upload.should.been.calledOnce;
                    done();
                }
                sut[0].config.handler(request, reply);
            });
        });
    });
    

    【讨论】:

    • 嗨!你能提供你的电子邮件连接吗?
    • @Roman 抱歉,我不愿意透露我的电子邮件。为了能够提供帮助,我认为您需要添加到示例代码中的只是您的要求和调用的方法,我想我可以进一步帮助您。
    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • @TobySpeight 我应该在答案中包含测试文件和索引文件吗?如果没有剩下的代码,它显然无法运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多