我想尝试使用require
来调用一个自执行的Javascript函数,并在调用时传递一个参数。但是,当我使用require
时,得到了“对象不是函数”的错误提示。
请问以下代码是否可行?如果可行,那么我的问题出在哪里呢?
模块
var _ = require('lodash');
var userRepository = (function(userRecords) {
console.log(userRecords);
var findByUsername = function(username, cb) {
//find username in the userNameData
//this may have been retrieved from the DB or passed in as mock data from the tests
var user = _.find(userRecords, {
"email": username
});
if (user) {
return cb(null, user);
} else {
return cb(null, null);
}
};
return {
findByUserName: findByUsername
};
})();
module.exports = userRepository;
代码中的使用
var userData = require('../test/data/users.json'),
userRepository = require('../db/userRepository')(userData);
describe('User Repository', function() {
describe('Find by username', function() {
it('should return a user record for <user> if the username <username> is found', function() {
var username = "test@testing.com";
var user = userRepository.findByUsername(username, function() {});
});
});
});
感谢您提前的任何帮助
require
传递一个参数。也就是说,我想将userRecords
传递进去(有点像依赖注入)。这样我就可以使模块更易于测试。这种做法可行吗?谢谢。 - Jon HunteruserRepository
,则不能在模块内调用此函数,因此它不应该是自调用的)IIFE。 - doldt