RSpec在电子邮件中失败应该无效

时间:2013-11-08 13:24:19

标签: ruby-on-rails ruby rspec devise

我是所有这些rails / rspec的新手等等,所以我试着按照我在项目中找到的一些我正在工作并且有意义的测试,它们是由脚手架生成但应用程序非常不同的,没有测试更新,所以我重新做每一次测试。

问题是,当我尝试验证无效电子邮件应该使用户无效时,它会失败。 我知道这没关系,因为我已经完成了测试并且没有任何问题就通过了。

我有可能以错误的方式看待这个......但

User_spec

describe "when email format is invalid" do
  it "should be invalid" do
    addresses = %w[user@foo,com user_at_foo.org example.user@foo.
                   foo@bar_baz.com foo@bar+baz.com]
    addresses.each do |invalid_address|
      @user.email = invalid_address
      @user.should_not be_valid
    end
  end
end

User_test

test "fail save new user with an corrupt email" do
  user = User.new
  user.name = 'Someone Name'
  user.password = '12345678'
  user.email = 'Someone Name@gmail..com'
  assert !user.save , "User was saved with an corrupt email"
end 

验证是由设计完成的,失败消息是“预期有效?返回false,得到真实

----编辑---

我的用户设置

...
describe User do
  before :each do
    @user = User.new(name: "Name of Names", email:"someone1@somewhere.com",password: "foobarfoobar", password_confirmation: "foobarfoobar" )
  end
...

1 个答案:

答案 0 :(得分:2)

你可以做一些事情:

context "validations" do
  describe "email" do
    subject { FactoryGirl.create(:user, email: email) }

    context "with an valid address" do
      let(:email) { "valid@email.com" }

      it { should be_valid }
    end

    context "with an invalid email address" do
      let(:email) { "invalid.email.com" }

      it { should_not be_valid }
    end
  end
end

所以我假设您正在使用FactoryGirl来创建有效的用户对象。只需为每个无效的电子邮件创建新的测试,这样您就可以看到哪些测试正在通过,哪些不通过。那么你可以通过TDD方式进行绿化。