在fixture中获取主键(id)(Python, SQLAlchemy)

7 投票
1 回答
714 浏览
提问于 2025-04-16 10:01

我正在使用fixture来测试一个Pylons应用,但遇到了一个问题。

假设我有这样一组数据:

class CompanyData(DataSet):

    class test_company:
        company_full_name = u'Firma Tęst'
        company_short_name = u'TęstCo'

class UserData(DataSet):

    class test_user:
        user_login = 'testuser'
        user_password = 'test'
        company = CompanyData.test_company

现在,问题是,当我在功能测试中使用这些数据(就像在http://farmdev.com/projects/fixture/using-fixture-with-pylons.html中描述的那样)时,我无法获取公司的id(主键)。

在我的应用中,用户登录后应该被重定向到公司资料页面,所以我需要公司的id。测试大致是这样的:

self.app.post(url(controller='main', action='login'), params={
    'login': UserData.test_user.user_login,
    'password': UserData.test_user.user_password
})

response = self.app.get(url(
    controller='events', action='index',
    company_id=UserData.test_user.company.company_id, # This doesn't work
    view='active'))
assert ... in response

第一个请求是登录用户,第二个请求是检查她登录后是否可以访问公司资料页面。

这样我得到的结果是:

AttributeError: class test_company has no attribute 'company_id'

我还尝试过:

UserData.test_user.company.ref('company_id')

但结果是:

<Ref.RefValue for CompanyData.test_company.company_id (not yet loaded)>

这让我觉得很奇怪……为什么没有加载呢?

有没有办法找出主键是什么?

1 个回答

0

在编程中,有时候我们需要把一些数据放到一个地方,方便以后使用。这就像把书放到书架上,想要的时候随时可以拿出来。

有些时候,我们会用到一个叫做“数组”的东西。数组就像一个盒子,可以装很多相同类型的东西,比如数字或者字母。你可以通过盒子的编号来找到里面的东西。

另外,还有一个叫做“函数”的概念。函数就像一个机器,你把东西放进去,它会给你一个结果。你可以多次使用这个机器,只要给它不同的东西,它就会给你不同的结果。

在编程中,很多时候我们需要把这些数组和函数结合起来使用,这样可以让我们的代码更简洁,更容易理解。

总之,编程就像在做一个大拼图,数组和函数就是拼图中的一些块,只有把它们放在正确的位置,才能完成整个图案。

UserData.test_user.company.ref('id')
or
UserData.test_user.ref('company_id')

撰写回答