0

我对所有这些 rails/rspec 等都是新手,所以我试图遵循我在项目中发现的一些测试,我正在工作并且有意义,它们是由脚手架生成的,但应用程序非常不同,没有测试已更新,因此我重新进行了每个测试。

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

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

用户规格

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

用户测试

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 

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

- - 编辑 - -

我的用户设置

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

1 回答 1

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 实现绿色。

于 2013-11-08T14:19:39.927 回答