新手在冷柜里,所以请对我有耐心。
我正试图在我的冷盒应用程序上实现TDD。
在我的服务模型下,我注入了这个依赖项。
property name="wirebox" inject="wirebox" property name="populator" inject="wirebox:populator";
在我的服务模型中,我有这样的方法。GetallUsers()
User function new(){
return wirebox.getInstance("User");
}
function getAllUsers(){
var users= queryExecute(
"SELECT * FROM USERS",
{},
{returnType="array"}
).map(function(user){
return populator.populateFromStruct(new(),user);
});
return users;
}在我的UserServiceTest上,我有这样的代码:
component extends="coldbox.system.testing.BaseModelTest" model="models.UserService"{
/*********************************** LIFE CYCLE Methods ***********************************/
function beforeAll(){
super.beforeAll();
// setup the model
super.setup();
// init the model object
model.init();
}
function afterAll(){
super.afterAll();
}
/*********************************** BDD SUITES ***********************************/
function run(){
describe( "Users Suite", function(){
it( "can get list of users", function(){
var stubPopulator = stub().$( 'populateFromStruct', {} );
model.$property( 'populator', 'variables', stubPopulator );
var users= model.getAll();
expect( event.getPrivateValue( "users") ).toBeStruct();
});
});
}但我说**variable [POPULATOR] doesn't exist**时出错了。
希望有人能帮我。
发布于 2022-07-12 22:39:26
您没有显示完整的测试包,但是根据它的名称,它是一个单元测试(或者一个ColdBox模型测试,它是一种单元测试)。单元测试在默认情况下不会拆分ColdBox框架,也不会处理被测试的CFC的注入。它们是“裸”创建的,这取决于您为CFC所具有的依赖关系提供模拟。
因此,在这种情况下,您需要为模型提供一个模拟populator,以便用于测试。所以就像这样:
var stubPopulator = createStub().$( 'populateFromStruct', {} )
model.$property( 'populator', 'variables', stubPopulator )
var users= model.getAll();我的填充器只返回一个空的结构。还值得注意的是,我不认为您的queryMap()返回的结构像您认为的那样,因此您可能需要确认该方法的功能。
或者,您可以切换到更多的集成测试,在测试CFC的pseduo构造函数中将this.loadColdBox设置为true,然后使用getInstance( 'UserService' )来获得完整构建的UserService实例,该实例将被注入到其中。具体情况取决于您尚未共享的几件事情,例如您的测试工具设置和您的测试包CFC的基类。
https://stackoverflow.com/questions/72936709
复制相似问题