gpt4 book ai didi

ruby-on-rails - 工厂女孩不发起对象

转载 作者:行者123 更新时间:2023-12-04 05:33:11 24 4
gpt4 key购买 nike

我想问题是我不知道如何正确使用带有 Rspec 的工厂女孩​​。或者就此正确地在rails中进行测试。不过还是觉得有点怪..

我有一个类,用户,具有以下工厂:

FactoryGirl.define do
factory :user do
name "admin"
email "admin@admin.com"
adminstatus "1"
password "foobar"
password_confirmation "foobar"
end

factory :user_no_admin, class: User do
name "user"
email "user@user.com"
adminstatus "2"
password "foobar"
password_confirmation "foobar"
end
...

我的测试如下所示:

...
describe "signin as admin user" do
before { visit login_path }
describe "with valid information" do
let(:user_no_admin) { FactoryGirl.create(:user_no_admin) }
let(:user) { FactoryGirl.create(:user) }
before do
fill_in "User", with: user.name
fill_in "Password", with: user.password
click_button "Login"
end

it "should list users if user is admin" do
response.should have_selector('th', content: 'Name')
response.should have_selector('td', content: user_no_admin.name)
response.should have_selector('td', content: user.name)
end
end
end#signin as admin user
...

基本上,我正在尝试测试,如果您以管理员身份登录,您应该会看到所有用户的列表。我稍后会在文件中测试以非管理员身份登录。我的数据库中已经有几个用户了。

在登录的用户列表中,“admin”与数据库中已有的用户一起显示。但是,除非我之前执行过类似操作,否则不会显示“用户”:

fill_in "User",    with: user_no_admin.name
fill_in "Password", with: user_no_admin.password

除非我使用它,否则它就好像不存在。但是,如果我使用 puts 它会打印出我输入的信息,即使我没有执行上面的“填充”。

我有一个类似的例子,其中 puts 对我有帮助。

describe "should have company name" do
let(:company) { FactoryGirl.create(:company) }
let(:category) { FactoryGirl.create(:category) }
let(:company_category) { FactoryGirl.create(:company_category, company_id: company.id, category_id: category.id) }
it "should contain companies name" do
puts company_category.category_id
get 'categories/' + company.categories[0].id.to_s
response.should have_selector('h4', :content => company.name)
end
end

没有上面的puts,我得到一个

Called id for nil

我必须先启动(?)工厂女孩创建的对象,然后才能以某种方式使用它吗?

还需要其他代码吗?

最佳答案

let(:whatever) 

直到您第一次调用对象时才创建对象。如果您希望它在首次使用前可用,请使用

let!(:whatever)

改为。

或者使用前 block :

before(:each) do
@company = FactoryGirl.create(:company)
....
end

这将在您需要使用它们之前创建对象。

关于ruby-on-rails - 工厂女孩不发起对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11204346/

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