繁体   English   中英

依赖变量不存在

[英]Dependency Variable Doesnt Exist

冷箱中的新手,所以请耐心等待我。

我正在尝试在我的冷箱应用程序上实现TDD

在我的服务模型下,我注入了这种依赖。

property name="wirebox" inject="wirebox" property name="populator" inject="wirebox:populator";

在我的服务模型上,我有这种方法。 获取所有用户()

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**

希望有人可以帮助我。

您没有显示完整的测试包,但根据名称显示它是一个单元测试(或 ColdBox 模型测试,它是一种单元测试)。 默认情况下,单元测试不启动 ColdBox 框架,也不处理被测 CFC 的注入。 它们是“裸”创建的,您可以为 CFC 拥有的依赖项提供模拟。

因此,在这种情况下,您需要为模型提供一个模拟populator器以用于测试。 所以是这样的:

var stubPopulator = createStub().$( 'populateFromStruct', {} )
model.$property( 'populator', 'variables', stubPopulator )
var users= model.getAll();

我的存根填充器只返回一个空结构。 还值得注意的是,我认为您的 queryMap() 不会像您认为的那样返回一个结构,因此您可能需要确认该方法的功能。

或者,您可以切换到更多的集成测试,在测试 CFC 的伪构造函数中将this.loadColdBox设置为 true,然后使用getInstance( 'UserService' )获取UserService的完整构建实例,该实例将注入填充器进去。 这究竟会是什么样子取决于您尚未共享的几件事,例如您的测试工具设置,以及您的测试包 CFC 的基类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM