2017-10-06 110 views
0

我想为以下方法编写测试用例。我是单元测试新手。请让我知道为以下方法编写测试用例的正确方法。如何使用此方法的rspec编写测试用例

def create_new_user 
    self.password_salt = BCrypt::Engine.generate_salt 
    self.password_hash = BCrypt::Engine.hash_secret(self.password, password_salt) 
    user = User.new(email: self.email, username:self.username, password_hash: password_hash, password_salt: password_salt) 
    if user.valid? 
     user.save ? {is_created: true, err:''} : {is_created: false, err:'Something went wrong,please try later...'} 
    else 
     {is_created: false, err: 'Please enter all mandetory fields..'} 
    end 
    end 
+0

究竟是什么问题在这里?你不熟悉rspec语法?单元测试一般? –

+0

@SergioTulentsev我是rspec新手。只有rspec才有2-3天的时间。我正在寻找像“expect(user).to be saved”这样的语法,如果它是一个有效的用户。以及如何测试“BCrypt :: Engine.generate_salt”。我的意思是说如何测试BCrypt应该生成盐然后散列 –

+0

为什么你认为你需要测试BCrypt方法?这个lib经过了开发人员的严格测试。没有必要重复努力。不过,您可能会检查调用的方法是否正确。例如,期望(BCrypt :: Engine)。接收(:generate_salt)和call_original。 –

回答

2

这可能不是“答案”本身,而是一些意见/建议可能会帮助你指明正确的方向:

  1. 你的方法看起来即使它要返回一个散列创建一个新用户。您应该可能会返回新用户。如果有错误,activerecord对象将会出现这些错误,不需要添加自己的错误。

  2. 记住要测试行为。这对于第1点的变化至关重要。此方法的行为是:它返回用户记录,无论是否保存,这就是行为。测试一下。

  3. 您可能不需要调用user.valid ?.只需调用user.save

  4. 您可能只需返回user.save本身,因为如果它工作,您将获得持久/保存的用户。如果没有,你可以检查user.errors

+0

@ashish gupta如果这有帮助,你能把这个标记为答案吗? – apanzerj

相关问题