首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟需要(Ed)服务

模拟需要(Ed)服务
EN

Stack Overflow用户
提问于 2017-05-17 21:02:20
回答 1查看 176关注 0票数 0

我试图使用sinon来模拟我的函数使用的服务,但是我无法找到将模拟注入到函数中的方法。

使用require获取服务

我的职能如下:

代码语言:javascript
复制
// something.js
const service = require('./service');
module.exports = {
    // do something using a service
    doSomething: function (options) {
        let results = [];
        return service.foo(option.param)
        // and return the value adding some logic
        .then(function(resultFromService){
            // want to test this flag
            if ( options.someFlag ) {
                results = resultFromService;
            }
        })
        .then(function(){
            /// more existing code here
            return results;
         });
    } 
}

我试图像这样嘲弄service.foo

代码语言:javascript
复制
const something = require('../../something.js');
const sinon = require('sinon');  
...
it('should doSomething by calling foo in the service', function(done) {

     ///I'm getting this error here: Error: Trying to stub property 'foo' of undefined
     sinon.stub( something.service , 'foo' )
     .returns(when(function() {
         return ['bar', 'baz'];
     }));


     let promise = something.doSomething({param:'for service', someFlag:true});
});

然后检查我的doSomething方法是否确实在执行它应该执行的逻辑。

问:如何为该服务注入一个模拟服务和/或一个模拟函数,该服务在我的something函数中定义为一个私有闭包作用域变量。

EN

回答 1

Stack Overflow用户

发布于 2017-05-17 23:19:05

我最终使用了mock-require

代码语言:javascript
复制
const mockRequire = require('mock-require');

it('do something', function(){
   mockRequire('./service', { 
      foo: function(p){
         return [];
      }
   });
   let something = require('./something.js); 
   // Now when it requires the service, it gets the mock instead
    something.doSomething({flag:true, param:'a'});
    assert. etc. etc
}));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44034716

复制
相关文章

相似问题

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