1
我是新来测试,并知道有类似的问题,但我无法找到一个很好的答案在任何地方,所以我想我得到了一劳永逸。测试嵌套资源CRUD与Rspec和FactoryGirl一劳永逸
我有项目资源有许多任务。 I 希望使用Factory Girl正确测试tasks_controller_spec.rb中的任务CRUD操作。怎么做?
这是我的代码到目前为止,让你开始...
的routes.rb
5 resources :projects do
6 resources :tasks
7 end
factories.rb
1 FactoryGirl.define do
2
3 factory :valid_project, :class => Project do
4
5 sequence(:name) do |n|
6 "FactoryProject - #{n}"
7 end
8 sequence(:description) do |n|
9 "Description for the FactoryProject - #{n}"
10 end
11
12 end
13
14 factory :valid_task, :class => Task do
15
16 sequence(:name) do |n|
17 "FactoryTask - #{n}"
18 end
19 sequence(:description) do |n|
20 "Description for the FactoryTask - #{n}"
21 end
22 valid_project
23
24 end
25
26 end
tasks_controller_spec.rb
1 require 'spec_helper'
2
3 describe TasksController do
4
5 before :each do
6 @valid_project = FactoryGirl.create :valid_project
7 end
8
9 describe 'Success' do
10
11 before :each do
12 @valid_attr = FactoryGirl.attributes_for :valid_task
13 end
14
15 it 'Should create new task' do
16 lambda do
17 post :create, :project_id => @valid_project, :task => @valid_attr
18 end.should change(Task, :count).by(1)
19 end
20
21 #it 'Should update the task' do
22 #end
23
24 end
25
26 describe 'Failure' do
27
28 before :each do
29 @invalid_attr = { :name => '', :description => '' }
30 end
31
32 it 'Should not create new task' do
33 lambda do
34 post :create, :project_id => @valid_project, :task => @invalid_attr
35 end.should_not change(Task, :count)
36 end
37
38 end
39
40 end
谢谢!使用attributes_for与构建相反有什么区别吗?另外,如果您知道'tasks_controller_spec.rb'的代码,以测试基本的CRUD功能,我将非常感谢... – oFca 2012-05-01 21:19:37
build在内存中创建一个对象,但不会将其保存到数据库。你仍然可以通过@ task.attributes获得它的属性。如果你想要的属性,attributes_for可能会更好,我只是不知道你如何填充关联。 – 2012-05-01 21:56:01