簡體   English   中英

模擬Node中的依賴(主要用於單元測試)

[英]Mocking dependency in Node (mainly for unit testing)

在提出問題之前搜索了一段時間。

文件結構:

.
|____lib
| |____bar.js
| |____baz.js
| |____foo.js
|____test
| |____bar.js
| |____baz.js
| |____foo.js

使用案例:

相對於上述的文件結構, ./lib/foo.js需要./lib/bar.js./lib/bar.js需要./lib/baz.js


通過./test/foo.js單元測試./lib/foo.js ,我想模擬./lib/bar.js ,所以,我只關心./lib/foo.js 一旦./test/foo.js中的測試結束,我想重置/取消模擬./lib/bar.js

通過./test/bar.js單元測試./lib/bar.js ,我想模擬./lib/baz.js ,所以,我只關心./lib/baz.js 一旦./test/foo.js中的測試結束,我想重置/取消模擬./lib/baz.js

等等等等。


或者換句話說,我想在測試文件中模擬依賴項並在需要時重置。

最有可能在測試文件中多次嘲笑並在測試文件中重新安裝完畢。

或者可能是我可以使用一些文件級別的閉包變量來控制本地模擬


下面提到的StackOverflow帖子有很好的討論,但我無法得出任何結論。

我遇到了以下模塊

還有其他人


在上面,看起來像mockery解決我的用例,主要是重置/取消模擬模擬的依賴

如何在proxyquire中實現相同的目標


是否還有其他模塊可以解決上述用例?

我使用deriderewire的組合。

例如,為了測試foo.js我會:

var rewire = require('rewire');
var deride = require('deride');
var Foo = rewire('../lib/foo');
var mockBar, foo;

describe('something', function() {
  beforeEach(function() {
      mockBar = deride.stub(['barMethod']);
      mockBar.setup.barMethod.when('bob').toReturn('Hello bob');
      Foo.__set__('bar', mockBar);
      foo = new Foo();
  });

  it('does something', function() {
    foo.someMethod('bob');
    mockBar.expect.barMethod.called.withArgs(['bob']);
  });
});

而且沒有任何不必要的要求。

免責聲明:我是deride的作者之一:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM