Aye*_*azo 5 javascript jasmine
我正在构建一个node.js模块,我也希望用Jasmine测试它.
假设我的模块看起来与此类似:
var myModule = function (foo, bar) {
// Begin a workflow
var workflow = new (require('events').EventEmitter)();
workflow.on('test', function () {
var greet = greet();
return greet;
});
workflow.emit('test');
};
function greet () {
return "Hi!";
}
module.exports = {
myModule: myModule
};
Run Code Online (Sandbox Code Playgroud)
如何使用Jasmine测试我的模块,定位我发出的所有事件?
像这样的东西:
var myModule = require('../myModule.js');
describe('My Module test', function () {
it('should get greet value', function () {
myModule.on('test', function () { // "test" as I wrote in myModule
expect(myModule.greet).toHaveBeenCalled();
});
});
});
Run Code Online (Sandbox Code Playgroud)
我使用 proxyquire 完成此操作: https: //github.com/thlorenz/proxyquire
在您的测试文件中:
var proxyquire = require('proxyquire');
var mockEvents = {};
var myModule = proxyquire('../myModule.js', {
events: mockEvents
});
describe('My Module test', function () {
beforeEach(function() {
mockEvents.EventEmitter = function () {};
mockEvents.EventEmitter.prototype = {
on: function () { },
emit: function () { }
};
spyOn(mockEvents.EventEmitter.prototype, 'on');
spyOn(mockEvents.EventEmitter.prototype, 'emit');
});
it('should get greet value', function () {
myModule()
expect(mockEvents.EventEmitter.prototype.on).toHaveBeenCalledWith('test');
expect(mockEvents.EventEmitter.prototype.emit).toHaveBeenCalledWith('test');
});
});
Run Code Online (Sandbox Code Playgroud)
您还可以使用间谍作为您的模拟 EventEmitter 等。
归档时间: |
|
查看次数: |
833 次 |
最近记录: |