在sinon中的一个特定存根测试不起作用

时间:2017-01-16 08:49:04

标签: javascript node.js unit-testing sinon stub

我遇到了问题,似乎无法找到解决方案。

我正在编写Node.js代码并使用Sinon进行单元测试。我正在测试服务并对存储库/数据库进行存根调用。尽管存在一个存储库方法,但是调用实际方法而不是存根,所以一切正常。这是相关的代码。

listingServiceTest.js



var chai = require('chai');
var expect = chai.expect;
var sinon = require('sinon');
var listingService = require('../listingService');
var listingRepository = require('../../repository/listingRepository');
var Listing = require('../../models/interfaceModel/listing');


//some testdata initialization
[..]

describe('saveListing(listing)', function() {
  //everything works fine in here
  [...]
});


describe('saveTags(listingID, tags)', function() {
  beforeEach(function() {
    sinon.stub(listingRepository, 'findTags', function(tags, callback) {
      //This one works fine
        var tags = [{
            text: tags[0],
            tagID: tags[0] + 'ID'
        }];

        setTimeout(function () {
            callback (tags);
        }, 10);
    });

    sinon.stub(listingRepository, 'saveTagCorrelation', function(listingID, tagID, done) {
      setTimeout(function() {
        //Here The actual Method is called instead of the stub ?!?!?
        console.log('im saveTagCorrelation stub');
        done();
      }, 10);
    });

    sinon.stub(listingRepository, 'saveTag', function(tag, callback) {
      //This one works fine
    });
  });

  afterEach(function() {
    listingRepository.findTags.restore();
    listingRepository.saveTag.restore();
    listingRepository.saveTagCorrelation.restore();
  });

  it("saveTags should execute this callback", function() {
    listingService.saveTags(util.slugify(pTitle), pTags, function() {
      //This obviously fails since the the stub isn't called           
      expect(listingRepository.saveTagCorrelation.getCall(0).args[0]).to.equal(util.slugify(pTitle));
      expect(listingRepository.saveTagCorrelation.getCall(0).args[1]).to.equal(pTags[0] + 'ID');
      expect(listingRepository.saveTag.getCall(0).args[0]).to.equal(pTags[1]);
      expect(listingRepository.saveTagCorrelation.getCall(1).args[0]).to.equal(util.slugify(pTitle));
      expect(listingRepository.saveTagCorrelation.getCall(1).args[1]).to.equal(pTags[1] + 'ID');
    });
  });
});




这里是repo,应该是存根(我可以在日志中看到,实际的方法是记录,而不是存根)。

listingRepository.js:



var db = require ('../models/index');
var util = require ('../util');

module.exports = {
    saveListing: [...],

    findTags: [...],

    saveTag: [...],

    saveTagCorrelation: function (listingID, tagID){
        //This is called instead of the stub
        console.log('in actual Method');
        var tagToSave;
        tagToSave = db.tag_listing.build({
            listingID: listingID,
            tagID: tagID
        });
        tagToSave.save();
    },

    getListingByID: [...]
}




我是瞎了吗?我错过了什么?

0 个答案:

没有答案