标签: sinon

轻松清理sinon存根

有没有办法轻松重置所有sinon spys模拟和存根,将与mocha的beforeEach块干净地工作.

我看到沙盒是一个选项,但我不知道如何使用沙盒

beforeEach ->
  sinon.stub some, 'method'
  sinon.stub some, 'mother'

afterEach ->
  # I want to avoid these lines
  some.method.restore()
  some.other.restore()

it 'should call a some method and not other', ->
  some.method()
  assert.called some.method
Run Code Online (Sandbox Code Playgroud)

javascript testing mocha.js stubbing sinon

126
推荐指数
6
解决办法
7万
查看次数

如何在JavaScript单元测试中模拟localStorage?

那里有没有图书馆要模拟localStorage

我一直在使用Sinon.JS进行大多数其他javascript 模拟,并发现它真的很棒.

我的初步测试显示localStorage拒绝在firefox(sadface)中分配,所以我可能需要某种黑客攻击:/

我现在的选择(如我所见)如下:

  1. 创建我的所有代码使用的包装函数并模拟它们
  2. 为localStorage创建某种(可能是复杂的)状态管理(测试前的快照localStorage,清理恢复快照).
  3. ??????

您如何看待这些方法,您认为还有其他更好的方法吗?无论哪种方式,我都会把最终制作的"库"放在github上,以获得开源的优点.

javascript unit-testing mocking local-storage sinon

90
推荐指数
8
解决办法
6万
查看次数

用Sinon.js拼写一个类方法

我试图使用sinon.js存根方法但我收到以下错误:

Uncaught TypeError: Attempted to wrap undefined property sample_pressure as function

我也去了这个问题(在sinon.js中拼写和/或模拟一个类?)并复制并粘贴代码但我得到了同样的错误.

这是我的代码:

Sensor = (function() {
  // A simple Sensor class

  // Constructor
  function Sensor(pressure) {
    this.pressure = pressure;
  }

  Sensor.prototype.sample_pressure = function() {
    return this.pressure;
  };

  return Sensor;

})();

// Doesn't work
var stub_sens = sinon.stub(Sensor, "sample_pressure").returns(0);

// Doesn't work
var stub_sens = sinon.stub(Sensor, "sample_pressure", function() {return 0});

// Never gets this far
console.log(stub_sens.sample_pressure());
Run Code Online (Sandbox Code Playgroud)

这是上面代码的jsFiddle(http://jsfiddle.net/pebreo/wyg5f/5/),以及我提到的SO问题的jsFiddle(http://jsfiddle.net/pebreo/9mK5d/1/).

我确保在jsFiddle甚至jQuery 1.9 的外部资源中包含sinon .我究竟做错了什么?

javascript node.js sinon

88
推荐指数
3
解决办法
7万
查看次数

Sinon错误尝试包装已经包装的函数

虽然这里有一个相同的问题,但我找不到我的问题的答案,所以这里提出我的问题:

我正在使用mocha和chai测试我的节点js应用程序.我正在使用sinion来包装我的功能.

describe('App Functions', function(){

  let mockObj = sinon.stub(testApp, 'getObj', (dbUrl) => {
     //some stuff
  });
  it('get results',function(done) {
     testApp.someFun
  });
}

describe('App Errors', function(){

  let mockObj = sinon.stub(testApp, 'getObj', (dbUrl) => {
     //some stuff
  });
  it('throws errors',function(done) {
     testApp.someFun
  });
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此测试时,它给了我错误

Attempted to wrap getObj which is already wrapped
Run Code Online (Sandbox Code Playgroud)

我也尝试过

beforeEach(function () {
  sandbox = sinon.sandbox.create();
});

afterEach(function () {
  sandbox.restore();
});
Run Code Online (Sandbox Code Playgroud)

在每个描述中,但仍然给我同样的错误.

node.js sinon

72
推荐指数
6
解决办法
4万
查看次数

如何在node.js中存根process.env?

我想存根process.env.FOO使用bar.

var sinon = require('sinon');
var stub = sinon.stub(process.env, 'FOO', 'bar');
Run Code Online (Sandbox Code Playgroud)

我糊涂了.我看过文件,但我还是不明白.sinonjs docs

sinonjs是一个例子,不是sinonjs没关系.

stub node.js sinon

68
推荐指数
5
解决办法
4万
查看次数

Sinon JS"试图包装已经包裹的ajax"

我运行测试时收到上述错误消息.下面是我的代码(我使用Backbone JS和Jasmine进行测试).有谁知道为什么会这样?

$(function() {
  describe("Category", function() {
     beforeEach(function() {
      category = new Category;
      sinon.spy(jQuery, "ajax");
     }

     it("should fetch notes", function() {
      category.set({code: 123});
      category.fetchNotes();
      expect(category.trigger).toHaveBeenCalled();
     }
  })
}
Run Code Online (Sandbox Code Playgroud)

testing backbone.js jasmine sinon

65
推荐指数
2
解决办法
3万
查看次数

Proxyquire,rewire,SandboxedModule和Sinon:利弊

在模拟Node依赖项时,我碰巧遇到了以下库:

它们似乎都或多或少地做同样的事情:允许你模拟require()调用(除了Sinon几乎嘲笑所有东西).它们似乎都需要一些非常复杂的设置,注意传递给字符串的确切语法require- 在重构期间不是很好.

每个图书馆的利弊是什么?我何时会选择一个而不是另一个?每个库都擅长的示例用例是什么?这个领域的其他产品还有哪些更好?

mocking node.js sinon proxyquire

62
推荐指数
1
解决办法
9540
查看次数

sinon stub withArgs可以匹配一些但不是所有参数

我有一个函数我正在使用多个参数调用它.我想检查第一个参数.其余的是回调功能,所以我想让他们独自一人.因此,我可能会使用ajax作为示例进行以下2次调用:

method.get = sinon.stub();
method.get(25,function(){/* success callback */},function(){/* error callback */});         
method.get(10,function(){/* success callback */},function(){/* error callback */});
Run Code Online (Sandbox Code Playgroud)

我不能使用,method.get.calls...因为它没有区分第一个get(25)和第二个get(10).但是,如果我使用method.get.withArgs(25).calls...那么它也不匹配,因为withArgs()匹配所有参数,这不会(并且永远不会,与回调类似).

我怎样才能让sinon存根根据第一个arg进行检查和设置响应?

sinon

57
推荐指数
2
解决办法
3万
查看次数

如何使用Jasmine和/或Sinon正确地测试jQuery的.ajax()承诺?

我有一个相当简单的函数,它返回一个jQuery .ajax()的承诺:

CLAW.controls.validateLocation = function(val, $inputEl) {
    return $.ajax({
        url: locationServiceUrl + 'ValidateLocation/',
        data: {
            'locationName': val
        },
        beforeSend: function() {
            $inputEl.addClass('busy');
        }
    }).done(function(result) {
        // some success clauses
    }).fail(function(result) {
        // some failure clauses
    }).always(function() {
        // some always clauses
    });
}
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,这个新的promises接口就像一个梦想,并在使用jQuery的.ajax()时很好地消除了回调金字塔.但是,我不能为我的生活弄清楚如何使用Jasmine和/或Sinon正确测试这些承诺:

  1. 所有Sinon的文档都假设您正在使用旧式回调; 我没有看到如何将它与promises/deferred一起使用的单个示例

  2. 当尝试使用茉莉花或兴农窥探窥探$阿贾克斯,间谍有效覆盖的承诺,所以其done,failalways条款不再对AJAX功能的存在,因此从来没有承诺解决和扔一个错误,而不是

我真的很喜欢一个或两个如何用上述测试库测试这些新的jQuery .ajax()promises的例子.我已经相当强烈地搜索了'网,并没有真正挖掘任何东西这样做.我找到的一个资源是使用Jasmine.ajax提到的,但我想尽可能避免这种情况,因为Sinon提供了大部分开箱即用的相同功能.

jquery unit-testing jasmine sinon

55
推荐指数
2
解决办法
2万
查看次数

一个存根如何与sinon保证一致?

我有一个具有以下功能的数据服务

function getInsureds(searchCriteria) {

    var deferred = $q.defer();

    insuredsSearch.get(searchCriteria,
        function (insureds) {
            deferred.resolve(insureds);
        },
        function (response) {
            deferred.reject(response);
        });

    return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)

我想测试以下功能:

function search ()
{
  dataService
      .getInsureds(vm.searchCriteria)
      .then(function (response) {
           vm.searchCompleted = true;

            if (response.insureds.length > 100) {
              vm.searchResults = response.insureds.slice(0, 99);
            } else {
                vm.searchResults = response.insureds;
           }
       });
}
Run Code Online (Sandbox Code Playgroud)

我如何保留承诺,以便当我调用getInsureds时它将解决承诺并立即返回结果.我开始像这样(茉莉花测试),但我被卡住了,因为我不知道如何解决诺言并传递所需的参数.

it("search returns over 100 results searchResults should contain only 100 records ", function () {

    var results103 = new Array();

    for (var i = 0; i …
Run Code Online (Sandbox Code Playgroud)

javascript jasmine sinon

49
推荐指数
4
解决办法
6万
查看次数