首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sinon.js-试图监视console.log,但它已经被包装好了

Sinon.js-试图监视console.log,但它已经被包装好了
EN

Stack Overflow用户
提问于 2015-03-14 19:58:56
回答 2查看 5.2K关注 0票数 3

我刚开始写节点测试.这是我第一次尝试编写gulp插件的单元测试:

代码语言:javascript
复制
var chai = require('chai');
var spy = require('chai-spies');
var es = require('event-stream');
var File = require('vinyl');
var mock = require('mock-fs');
var sinon = require('sinon');
var sinonChai = require("sinon-chai");
//var rewire = require("rewire");
//var myModule = rewire("./test.js");
var es = require('event-stream');

chai.should();
chai.use(sinonChai);

describe('gulp-newy', function() {
  var fs = require('fs');
    var fakeFile, pspy;

    beforeEach(function() {
        //myModule.__set__('__dirname', "/home/one");
        mock({
            __dirname: mock.directory({
                mode: 0755,
                items: {
                file1: 'file one content',
                file2: new Buffer([8, 6, 7, 5, 3, 0, 9])
                }
            })
        });

    });
    afterEach(mock.restore);


    describe('get files', function() {
        it('should do something', function(done) {
        mock({
            foo: mock.file({
            content: 'nothing',
            mtime: new Date(Date.now())
            }),
            bar: mock.file({
            content: 'nothing',
            mtime: new Date(1,1)
            })
        });
        fakeFile = new File({
           contents: new Buffer('foo'),
           history: ['foo']
        });


       var bar = function(dest) { return 'bar' };
       spy1 = sinon.spy(console, "log");
       stream = newy(bar);
       stream.write(fakeFile);
       stream.on('data', function() {
           console.log("sss");
       });
       spy1.should.have.been.called();
       done();
       });
    });
});

我得到了TypeError: Attempted to wrap log which is already wrapped,但我不知道它在我的间谍之前被包裹在哪里。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-15 00:57:29

我在用摩卡--看.哪个疗程永远不会结束。因为这个..。另一个间谍存在。答案是Cleaning up sinon stubs easily

票数 4
EN

Stack Overflow用户

发布于 2016-08-07 10:04:24

使用sinon时,您需要确保在每次测试后恢复存根\模拟。如果你不这样做,它们仍然是存根,如果你试图在一个不同的测试中再次对它们进行存根处理,它就会大喊要再次包装一个方法。有很多方法可以做到这一点,在沙箱中包含所有存根,或者只是在"after“子句中进行还原。例如:

代码语言:javascript
复制
describe('This is a test', ()=> {


       before(()=> {
            sinon.stub(myObject,'myMethod', ()=> {
                return 'stubbed result';
            })
        });
        it('should stub my method', ()=>{
            expect(myObject.myMethod).to.be.equal('stubbed result');
        });
        after(()=> {
            //important part
            myObject.myMethod.restore();
        });
    })
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29053532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档