Ruby on rails 模拟数据库和存根时出现问题:保存

Ruby on rails 模拟数据库和存根时出现问题:保存,ruby-on-rails,rspec,mocking,Ruby On Rails,Rspec,Mocking,首先,我在mock/stub方面是新手,我在mock/stub方面遇到了麻烦 这是我的申请代码: describe 'Register an User' do VALID_USERNAME = "..." VALID_PASSWORD = "..." VALID_USER = User.new(VALID_USERNAME, VALID_PASSWORD) before (:each) do User.any_instance.stub(:sa

首先,我在mock/stub方面是新手,我在mock/stub方面遇到了麻烦

这是我的申请代码:

describe 'Register an User' do
    VALID_USERNAME = "..."
    VALID_PASSWORD =  "..."
    VALID_USER = User.new(VALID_USERNAME, VALID_PASSWORD)

    before (:each) do
        User.any_instance.stub(:save).and_return(true)
    end

    it 'should create a new user' do
        post :create, :username => VALID_USERNAME, :password => VALID_PASSWORD
        expect(response.status).to eq(201)
        #user_inserted = ...
        #expect(user_inserted).to eq(VALID_USER)
    end
end
以及:

我试图模拟ActiveRecord,测试“create”,而不需要测试“get”。 这里的想法是,当我调用“user.save”时,可以在不使用数据库的情况下保存用户,然后我将在我的测试用例中进行访问,因此我保证用户被“插入”到我的数据库中

如果我运行我的测试,它会通过,但我不会验证我愿意做什么。有什么帮助或想法吗


谢谢

这没有意义,因为如果不插入数据库,就无法在数据库中测试插入。为什么?

Rails附带内置验证,这是保存项目的第一步。如果验证通过,则通过数据库中的ActiveRecord插入该项。数据库验证从此步骤开始,如果任何验证失败,则会引发异常

所以。如果要测试是否可以在数据库中创建用户,请将验证添加到与数据库匹配的模型中。然后您将能够使用方法
是否有效?

这将确保您的用户有效地存储在数据库中。因此,只要知道:
user\u instance.is\u valid?
定义了一个可插入项,就可以在任何地方使用它

我希望这就是你要问的。

什么是
User.new(有效用户名、有效密码)
new
方法是您的自定义方法吗?如果是,返回什么?请注意,从ActiveRecord接受哈希
def create
        username = params[:username]
        password = params[:password]
        if not username or not password
            render :json => '', :status => 400
        else
            success = User.new(username, password).save
            if success
                render :json => '', :status => 201
            else
                render :json => '', :status => 500
            end
        end
    end