0

所以在我的功能文件中,我有一个登录后台步骤:

Given /^I login$/ do
  user = Factory(:user)
  visit '/login'
  fill_in("login", :with => user.login)
  fill_in("password", :with => user.password)
  click_button("Login")
  @current_user = user
end

在下一步中,我希望能够包含一个 user_id,但不确定如何获取我已登录的 @current_user。

Given a post exists with name: "My Post", category_id: 3, user_id: ?????

如何使用 @current_user 创建正确的关系?

谢谢。

4

2 回答 2

1

如果你这样改写它:

Given I created a post with the title "My Post" in the "foobar" category

那么应该如何实现它应该是最明显的:

Given /^I created post with the title "([^\"]+)" in the "([^\"]+)" category/ do |title, category|
    current_user.posts.create!(
        :title => title, 
        :category => Category.find_or_create_by_name(category))
end

显然,这取决于你如何构建你的关联,但它应该有效。如果您使用的是 Factory Girl,那么它将类似于:

Factory.create(:post, :category => ..., :user => current_user)

不要忘记您的黄瓜规格应该以用户所见和所做的为准,而不是以您的系统工作方式为准,因此正如 Baldu 所说,将记录 ID 保留在步骤定义之外。

于 2009-12-08T22:50:36.860 回答
0

让 step 找出 id 而不是试图传递它。

Given /^a post exists with name: "([^\"]+)", category_id: (\d+)$/ do |name, category_id|
  @post = Post.create!(:name => name, :category_id => category_id, :user_id => @current_user.id)
end

如果这是我的代码,我可能也会:category_id离开那里。我将诸如在我的场景描述中显示的对象 ID 之类的技术内容作为我对它们的了解太低的标志。

于 2009-12-08T21:26:28.040 回答