rspec已更改为1,但已更改为2

时间:2019-01-08 19:57:01

标签: ruby-on-rails rspec

我有以下代码来测试控制器的动作创建

    let(:custom_action)     { create :custom_action, entity: entity }

Describe '#create' do  
        context 'with valid attributes' do
          before { allow(controller).to receive(:custom_actions_path).and_return('/') }

          subject { post :create, params: { custom_action: {
            name: custom_action.name,
            label: custom_action.label,
            url: custom_action.url,
            request_method: custom_action.request_method,
            entity_id: entity.id
          }, 
            locale: user.language }}

          it 'should increment resource list by 1' do 
            expect { subject }.to change { CustomAction.count }.by(1)
          end
       end
    end

运行测试时,我得到:更改为1,但更改为2

我检查了动作,如果创建新对象总是创建一个,而不是两个。

我是否更正了主题?我的考试有什么问题?谢谢

1 个答案:

答案 0 :(得分:1)

在您的subject块中调用expect会评估subject块。主题块调用您的操作,但需要对此进行评估custom_action。最后,在评估块时,您的custom_action块将创建一个CustomAction,而您的实际控制器操作将在请求期间再创建一个。

将您的let更改为let!,以修复您的测试。