使用RSpec 3在块之前运行一次

问题描述 投票:1回答:2

我找不到解决方法。

这是我的测试:

require 'rails_helper'

RSpec.describe V1::UsersController do

  describe '#create' do
    let(:post_params) do
      {
        first_nm: Faker::Name.first_name,
        last_nm: Faker::Name.last_name ,
        password: "test123456",
        password_confirmation: "test123456",
        email_address: Faker::Internet.email
      }
    end

    before do
      post :create, params: post_params
    end

    context 'successful create' do
      subject(:user) { User.find_by_email(post_params[:email_address]) }

      it 'persists the user' do
        expect(user).not_to be_nil
      end

      it 'user data is correct' do
        post_params.except(:password, :password_confirmation).each do |k, v|
          expect(user.send(k)).to eq(v)
        end
      end

      it 'returns responsde code of 201' do
        expect(response.status).to eq(201)
      end

    end
  end
end

我只希望该控制器被击中一次。但是,我似乎无法正常工作。

我尝试设置before(:context),但出现错误

RuntimeError:
       let declaration `post_params` accessed in a `before(:context)` hook at:

       `let` and `subject` declarations are not intended to be called
       in a `before(:context)` hook, as they exist to define state that
       is reset between each example, while `before(:context)` exists to
       define state that is shared across examples in an example group.

我不希望这样的简单测试能够保留多个用户。我也不想为每个示例都击中api。

我希望before块运行一次。我该怎么办?

ruby-on-rails rspec rspec3 ruby-on-rails-6
2个回答
0
投票
有趣的是,before基本上是before(:each)的简短表达方式(IMO更有意义)。>>

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.