我正在尝试在Ruby on Rails中使用Test :: Unit和Shoulda设置Factory Girl.我已经安装了gem,在test/factories目录下创建了我的工厂文件,并在test/models目录下创建了我的spec文件.我得到的当前错误是'ArgumentError:No such factory:test',这让我相信test_factory.rb文件没有被加载?知道我应该改变什么?
这是我的文件.
#test/factories/test_factory.rb
Factory.define :test do |t|
t.name 'test_spotlight'
t.label 'test spotlight label'
end
Run Code Online (Sandbox Code Playgroud)
和
#test/modes/test_spec.rb
require 'test_helper'
require 'factory_girl'
class TestTest < Test::Unit::TestCase
def setup
@test = Factory.build(:test)
end
context "A test" do
should "save with the minimum requirements" do
assert @test.save
end
end
end
Run Code Online (Sandbox Code Playgroud) 我为我的Rails 3.1应用程序添加了一些确认对话框,在此之前,他们进行了相应的测试.按照Railscast#257的模型,我在测试中添加了':js => true',添加了database_cleaner并相应地修改了spec_helper.rb文件.
当我运行测试时,Firefox启动,Capybara-Selenium在字段中填入相应的用户名和密码,但登录失败(即"无效的用户名/密码".)其他没有':js =的测试> true'并且还登录,仍然通过.
我想在将来为我的应用程序添加更多javascript,并且我正在避免破解Capybara以使其工作的解决方案(例如,在所有对话框上单击"确定".)
我可能会缺少什么想法?失败,有关如何调试此问题的任何建议?
谢谢.
我想在控制器测试中使用FactoryGirl.attributes_for,如:
it "raise error creating a new PremiseGroup for this user" do
expect {
post :create, {:premise_group => FactoryGirl.attributes_for(:premise_group)}
}.to raise_error(CanCan::AccessDenied)
end
Run Code Online (Sandbox Code Playgroud)
...但这不起作用,因为#attributes_for省略了:user_id属性.这里的区别#create和#attributes_for:
>> FactoryGirl.create(:premise_group)
=> #<PremiseGroup id: 3, name: "PremiseGroup_4", user_id: 6, is_visible: false, is_open: false)
>> FactoryGirl.attributes_for(:premise_group)
=> {:name=>"PremiseGroup_5", :is_visible=>false, :is_open=>false}
Run Code Online (Sandbox Code Playgroud)
请注意:不存在:user_id #attributes_for.这是预期的行为吗?
FWIW,我的工厂文件包含的定义:premise_group和:user:
FactoryGirl.define do
...
factory :premise_group do
sequence(:name) {|n| "PremiseGroup_#{n}"}
user
is_visible false
is_open false
end
factory :user do
...
end
end
Run Code Online (Sandbox Code Playgroud) 使用rails,devise,rspec和factorygirl:
试图为我的网站创建一些测试.我正在使用确认模型进行设计,因此当我使用FactoryGirl创建用户时,用户未得到确认.
这是我的工厂.rb:
FactoryGirl.define do
factory :user do
full_name "Aren Admin"
email "aren@example.com"
password "arenaren"
password_confirmation "arenaren"
role_id ADMIN
end
end
Run Code Online (Sandbox Code Playgroud)
这是我的rspec测试文件:
require 'spec_helper'
describe "Admin pages" do
subject { page }
describe "home page" do
let(:user) { FactoryGirl.create(:user) }
before { visit admin_home_path }
it { should have_content("#{ROLE_TYPES[user.role_id]}") }
end
end
Run Code Online (Sandbox Code Playgroud)
我收到错误,因为用户未得到确认.通过搜索我很确定我需要使用'确认'方法!并且它属于factories.rb文件,但我不知道在哪里放它.
我正在按照本教程开始使用工厂女孩的轨道上的TDD,rspec,我遇到了这个问题我无法理解.
这是我的"工厂".rb(events.rb)
require 'faker'
FactoryGirl.define do
factory :event do
name "HIGH"
genre "house, techno, idb"
venue_name "Westbourne Studios"
venue_address "4-6 Chamberlayne Road"
venue_postcode "NW103JD"
begin_time "10pm"
end_time "2am"
user_id 2
description "A Super massive party with loads of everything you would want around."
status true
venue_id nil
end
end
Run Code Online (Sandbox Code Playgroud)
这是event_spec.rb:
require 'spec_helper'
require 'factory_girl_rails'
describe Event do
it "has a valid factory" do
Factory.create(:event).should be_valid
end
it "is invalid without a name"
it "is invalid without a genre" …Run Code Online (Sandbox Code Playgroud) 我有:
RSpec.configure do |config|
config.include FactoryGirl::Syntax::Methods
end
Run Code Online (Sandbox Code Playgroud)
哪个适当的工作简单rspec spec/model/user_spec.rb(允许我使用create(:user),而不是FactoryGirl.create(:user)).但是,如果我zeus rspec spec/model/user_spec.rb用来加速我的规格,它会让我失误:
Failure/Error: @user = create(:user)
NoMethodError:
undefined method `create' for #<RSpec::Core::ExampleGroup::Nested_2::Nested_1:0x007fc8618e4960>
Run Code Online (Sandbox Code Playgroud)
我如何使用这个语法与宙斯?
我的项目结构如下:
projects/warehouse/core
projects/warehouse/products/bottles
projects/warehouse/products/boxes
Run Code Online (Sandbox Code Playgroud)
在这个项目中,应用程序逻辑,宝石等都在core应用程序中.我boxes为rspec设置了这样的:
projects/warehouse/products/boxes/spec
/factories
/models
Run Code Online (Sandbox Code Playgroud)
该factories目录包含cubics.rb:
FactoryGirl.define do
factory :cubic
id 1
dimension 12
end
end
Run Code Online (Sandbox Code Playgroud)
该models目录包含cubic_spec.rb:
require 'spec_helper'
describe Boxes::Cubic do
it "has a valid factory" do
FactoryGirl.create(:cubic).should be_valid
end
end
Run Code Online (Sandbox Code Playgroud)
该Cubic模型位于products/boxes/app/models/boxes/cubic.rb.
module Boxes
class Cubic < BoxExBase
self.table_name = 'containers'
#validation stuff goes here
end
end
Run Code Online (Sandbox Code Playgroud)
简单明了.当我执行时,rspec ../products/boxes/spec/models/cubic_spec.rb我得到了ArgumentError:Factory未注册:cubic.我已经尝试在spec_helper.rb中要求factory_girl_rails.我试过修改spec_helper.rb w /
FactoryGirl.definition_file_paths << File.join(File.dirname(__FILE__), 'factories')
FactoryGirl.find_definitions
Run Code Online (Sandbox Code Playgroud)
core包含 …
使用FactoryGirl以正确的顺序获取所有鸭子很麻烦.
设置极简主义的rails应用程序(3.0.11),factory_girl_rails(1.4.0),factory_girl(2.3.2)和cucumber-rails(1.2.1)以及ruby-1.8.7-p352.
黄瓜测试是:
Feature: a
Scenario: test factory-girl
Given the following user exists:
| name | email |
| Brandon | brandon@example.com |
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
cucumber
Using the default profile...
"Adam Advertiser"
"a@b.com"
#<User id: nil, name: nil, created_at: nil, updated_at: nil, email: nil>
Feature: a
Scenario: test factory-girl # features/users.feature:2
Given the following user exists: # factory_girl-2.3.2/lib/factory_girl/step_definitions.rb:100
| name | email |
| Brandon | brandon@example.com |
**Factory not registered: user (ArgumentError)**
features/users.feature:3:in `Given the following user exists:'
Failing Scenarios: …Run Code Online (Sandbox Code Playgroud) 我正在使用factory_girl在我的测试中创建对象,这是我工厂的一个例子:
factory :user do
name "John"
surname "Doe"
trait :with_photo do
ignore do
photo_count 1
end
after(:create) do |user, evaluator|
FactoryGirl.create_list(:photo, evaluator.photo_count)
end
end
end
Run Code Online (Sandbox Code Playgroud)
所以我可以创建一个像这样的用户:
FactoryGirl.create(:user, :with_photo)
Run Code Online (Sandbox Code Playgroud)
或者没有照片:
FactoryGirl.create(:user)
Run Code Online (Sandbox Code Playgroud)
或者创建用户列表:
FactoryGirl.build_list(:user, 5)
Run Code Online (Sandbox Code Playgroud)
但是:with_photo,如果我想用照片创建其中五个用户,我如何建立一个具有特征(特质存在)的用户列表?
无法调用"dummy = create(:user)"来创建用户.已经来回走了几个小时.
/home/parreirat/backend-clone/Passworks/spec/models/user_spec.rb:15:in `block (2 levels) in <top (required)>': undefined method `create' for #<Class:0xbcdc1d8> (NoMethodError)"
Run Code Online (Sandbox Code Playgroud)
这是工厂,users.rb:
FactoryGirl.define do
factory :user do
email 'heheheheheheh@gmail.com'
password 'chucknorris'
name 'luis mendes'
end
end
Run Code Online (Sandbox Code Playgroud)
这就是我在user_spec.rb中调用FactoryGirl的方式:
require 'spec_helper'
describe 'User system:' do
context 'registration/login:' do
it 'should have no users registered initially.' do
expect(User.count).to eq(0)
end
it 'should not be logged on initially.' do
expect(@current_user).to eq(nil)
end
dummy = create(:user)
it 'should have a single registered user.' do
expect(User.count).to eq(1)
end
end
end
Run Code Online (Sandbox Code Playgroud)
我按照说明将其添加到spec_helper.rb: …