如何存根对象的 属性,而不是方法?
How to stub object's property, not method?
我有一个文件 config.js,其中包含以下代码:
module.exports:
{
development: {
switch: false
}
}
我有另一个文件 bus.js,其中包含以下代码:
var config=require('config.js');
getBusiness:function(req,callback){
if(config.switch) {
// Do something
}else{
// Do something else
}
}
现在,我想对文件进行单元测试bus.js
require('mocha');
var chai = require('chai'),
expect = chai.expect,
proxyquire = require('proxyquire');
var bus = proxyquire('bus.js', {
'config':{
switch:true
}
});
describe('Unit Test', function() {
it('should stub the config.switch', function(done) {
bus.getBusiness(req, function(data) {
// It should stub the config.switch with true not false and give code coverage for if-else statmt.
});
done();
});
});
任何建议或帮助...
您需要像这样要求您的模块 var config=require('./config.js');
。
编辑:您应该将 require 调用更改为上面的内容。即使它在您代理为 ('config.js') 时有效,它也不会在现实生活中起作用。此外,您可能需要以相同的方式调用总线并构建配置对象,因为它在实际文件中。
var bus = proxyquire('./bus.js', {
'./config':{
development: {
switch:true
}
}
});
在我看来,您可以在测试文件中执行此操作:
var chai = require('chai'),
expect = chai.expect;
var config = require('./config');
describe('Unit Test', function() {
it('should stub the config.switch', function(done) {
config.development.switch = true;
bus.getBusiness(req, function(data) {
...
done();
});
});
});
我有一个文件 config.js,其中包含以下代码:
module.exports:
{
development: {
switch: false
}
}
我有另一个文件 bus.js,其中包含以下代码:
var config=require('config.js');
getBusiness:function(req,callback){
if(config.switch) {
// Do something
}else{
// Do something else
}
}
现在,我想对文件进行单元测试bus.js
require('mocha');
var chai = require('chai'),
expect = chai.expect,
proxyquire = require('proxyquire');
var bus = proxyquire('bus.js', {
'config':{
switch:true
}
});
describe('Unit Test', function() {
it('should stub the config.switch', function(done) {
bus.getBusiness(req, function(data) {
// It should stub the config.switch with true not false and give code coverage for if-else statmt.
});
done();
});
});
任何建议或帮助...
您需要像这样要求您的模块 var config=require('./config.js');
。
编辑:您应该将 require 调用更改为上面的内容。即使它在您代理为 ('config.js') 时有效,它也不会在现实生活中起作用。此外,您可能需要以相同的方式调用总线并构建配置对象,因为它在实际文件中。
var bus = proxyquire('./bus.js', {
'./config':{
development: {
switch:true
}
}
});
在我看来,您可以在测试文件中执行此操作:
var chai = require('chai'),
expect = chai.expect;
var config = require('./config');
describe('Unit Test', function() {
it('should stub the config.switch', function(done) {
config.development.switch = true;
bus.getBusiness(req, function(data) {
...
done();
});
});
});