gpt4 book ai didi

ruby-on-rails - 用户 : Testing Authlogic with Cucumber and Factory Girl 的未定义方法 'password_confirmation'

转载 作者:行者123 更新时间:2023-12-02 04:13:44 24 4
gpt4 key购买 nike

当我单独测试它们时,我的测试工作正常,

rake cucumber FEATURE = 'path/to/feature'

但是当我尝试运行时
rake cucumber

他们因以下错误而失败
undefined method `password_confirmation=' for #<User:0x1069545f0> (NoMethodError)

当我尝试使用 Factory.build(:user) 创建用户时会出现这种情况。我有一个定义 :user 的工厂文件。

我真的不知道如何确认这一点,但好像 authlogic 不存在并且 User 模型还没有添加的方法。当我在工厂尝试构建新用户时查看用户方法 (User.new.methods.include?("password_confirmation=")) 时,有一个由该名称定义的方法。

我对此进行了很多搜索,但没有看到任何相关内容,所以我假设这是我正在做的其他事情。

编辑:

更多信息 - 我已经能够在一个简单的案例中重现这一点:

- - - - 。特征
Background:
Given user "Bad Admin" with email address "badmin@gmail.com" and password "password" exists with "admin" credentials
Given user "Good Admin" with email address "goodadmin@gmail.com" and password "password" exists with "edit" credentials

Scenario: valid log in with authorization
When I go to the login page

Scenario: invalid login
When I go to the login page

---- 工厂.rb
Factory.define :user do |u|
u.first_name "Arthur"
u.last_name "Dent"
u.email { Factory.next(:user_email) }
u.password "default"
u.password_confirmation "default"
end

---- 步骤.rb
Given /^user "([^"]*)" with email "([^"]*)", password "([^"]*)" and credentials "([^"]*)" exists$/ do |name, email, password, role|
names = name.split(' ')
user = Factory(:user, :first_name => names.first, :last_name => names.last, :email => email, :password => password, :password_confirmation => password)

user.has_role! role.downcase.gsub(' ', '_')
end

最佳答案

在您的步骤定义文件中的某处,您应该使用 before 激活 Authlogic。步骤方法:

Before do
include Authlogic::TestCase
activate_authlogic
end

您的用户的工厂应如下所示:
Factory.define :user do |f|
f.sequence(:id) { |n| n }
f.sequence(:username) { |n| "test#{n}" }
f.password "secret"
f.password_confirmation { |u| u.password }
f.sequence(:email) { |n| "test#{n}@example.com" }
end

但是您不需要使用 Factory 来创建用户。这是我注册和现有用户的场景:
  Scenario: Successful sign up
Given I am an anonymous user
And I am on the home page
When I follow "Join now!"
And I fill in "Username" with "test"
And I fill in "Email" with "test@mail.ru"
And I fill in "Password" with "secret"
And I fill in "Confirm Password" with "secret"
And I press "Create my account"
Then I should be logged in

Scenario Outline: Show Sign in or Sign out and Sign Up links
Given the following user records
| username | password |
| test | secret |
Given I am logged in as "<login>" with password "secret"
When I go to the home page
Then I should <action 1>
And I should <action 2>
Examples:
| login | action 1 | action 2 |
| test | see "Sign out" | see "My Profile" |
| | see "Sign in" | see "Sign up" |

工厂将用于第二种情况。对应步骤的定义:
Given /^I am an anonymous user$/ do
!UserSession.find
end

Then /^I should be logged in$/ do
UserSession.find
end

Given /^the following (.+) records$/ do |factory, table|
table.hashes.each do |hash|
Factory(factory, hash)
end
end

Given /^I am logged in as "([^\"]*)" with password "([^\"]*)"$/ do |username, password|
unless username.blank?
visit signin_url
fill_in "Username", :with => username
fill_in "Password", :with => password
click_button "Sign In"
end
end

关于ruby-on-rails - 用户 : Testing Authlogic with Cucumber and Factory Girl 的未定义方法 'password_confirmation',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3828304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com