RSpec for email format validation failed
I've got user devise model with validations
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :first_name, presence: true, length: { maximum: 100 }
validates :last_name, presence: true, length: { maximum: 100 }
validates :email, presence: true, uniqueness: true, format: { with: /A.+@.+..+z/ }
end
and RSpec file to test email validation
describe 'email field' do
subject { User.new(first_name: 'jan', last_name: 'kowalski', email: 'jan@foo.com').valid? }
context 'when email has wrong format' do
let(:email) { 'jan@foo' }
it 'complains for invalid format' do
is_expected.to eq false
end
let(:email) { 'jan' }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when email has correct format' do
it 'accepts valid format' do
is_expected.to eq true
end
end
end
I want to test the validations for correct email address format which is in user model. Every test passed well except the last where I have an error expected: true got: false
. Did I miss something in a spec file? or maybe I have wrong declaration in user model? Any helps are welcomed.
ruby-on-rails rspec
add a comment |
I've got user devise model with validations
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :first_name, presence: true, length: { maximum: 100 }
validates :last_name, presence: true, length: { maximum: 100 }
validates :email, presence: true, uniqueness: true, format: { with: /A.+@.+..+z/ }
end
and RSpec file to test email validation
describe 'email field' do
subject { User.new(first_name: 'jan', last_name: 'kowalski', email: 'jan@foo.com').valid? }
context 'when email has wrong format' do
let(:email) { 'jan@foo' }
it 'complains for invalid format' do
is_expected.to eq false
end
let(:email) { 'jan' }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when email has correct format' do
it 'accepts valid format' do
is_expected.to eq true
end
end
end
I want to test the validations for correct email address format which is in user model. Every test passed well except the last where I have an error expected: true got: false
. Did I miss something in a spec file? or maybe I have wrong declaration in user model? Any helps are welcomed.
ruby-on-rails rspec
add a comment |
I've got user devise model with validations
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :first_name, presence: true, length: { maximum: 100 }
validates :last_name, presence: true, length: { maximum: 100 }
validates :email, presence: true, uniqueness: true, format: { with: /A.+@.+..+z/ }
end
and RSpec file to test email validation
describe 'email field' do
subject { User.new(first_name: 'jan', last_name: 'kowalski', email: 'jan@foo.com').valid? }
context 'when email has wrong format' do
let(:email) { 'jan@foo' }
it 'complains for invalid format' do
is_expected.to eq false
end
let(:email) { 'jan' }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when email has correct format' do
it 'accepts valid format' do
is_expected.to eq true
end
end
end
I want to test the validations for correct email address format which is in user model. Every test passed well except the last where I have an error expected: true got: false
. Did I miss something in a spec file? or maybe I have wrong declaration in user model? Any helps are welcomed.
ruby-on-rails rspec
I've got user devise model with validations
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
validates :first_name, presence: true, length: { maximum: 100 }
validates :last_name, presence: true, length: { maximum: 100 }
validates :email, presence: true, uniqueness: true, format: { with: /A.+@.+..+z/ }
end
and RSpec file to test email validation
describe 'email field' do
subject { User.new(first_name: 'jan', last_name: 'kowalski', email: 'jan@foo.com').valid? }
context 'when email has wrong format' do
let(:email) { 'jan@foo' }
it 'complains for invalid format' do
is_expected.to eq false
end
let(:email) { 'jan' }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when email has correct format' do
it 'accepts valid format' do
is_expected.to eq true
end
end
end
I want to test the validations for correct email address format which is in user model. Every test passed well except the last where I have an error expected: true got: false
. Did I miss something in a spec file? or maybe I have wrong declaration in user model? Any helps are welcomed.
ruby-on-rails rspec
ruby-on-rails rspec
asked Nov 22 '18 at 18:09
wichruwichru
417
417
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
you have some mistakes in your spec file, the two let of email are not execution in anyway.
if you want that behavior you need to replace the email option in your subject by a variable, and your second it you need to wrap it in a context and put inside you let(:email), this is the way that rspec is going to replace the value of your subject in each it.
Here an example but using a password variable, also your two first test are passing, because your are missing the password that way your expec is false, but they are not test the test your are describing.
describe 'password field' do
subject { Usuario.new(nombre: 'jan', username: 'kowalski', password: password).valid? }
context 'when password has wrong format' do
let(:password) { nil }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when password size is incorrect' do
let(:password) { 'jan' }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when password has correct format' do
let(:password) { '1qaz2wsx' }
it 'accepts valid format' do
is_expected.to eq true
end
end
end
Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
– wichru
Nov 22 '18 at 21:18
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436282%2frspec-for-email-format-validation-failed%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
you have some mistakes in your spec file, the two let of email are not execution in anyway.
if you want that behavior you need to replace the email option in your subject by a variable, and your second it you need to wrap it in a context and put inside you let(:email), this is the way that rspec is going to replace the value of your subject in each it.
Here an example but using a password variable, also your two first test are passing, because your are missing the password that way your expec is false, but they are not test the test your are describing.
describe 'password field' do
subject { Usuario.new(nombre: 'jan', username: 'kowalski', password: password).valid? }
context 'when password has wrong format' do
let(:password) { nil }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when password size is incorrect' do
let(:password) { 'jan' }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when password has correct format' do
let(:password) { '1qaz2wsx' }
it 'accepts valid format' do
is_expected.to eq true
end
end
end
Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
– wichru
Nov 22 '18 at 21:18
add a comment |
you have some mistakes in your spec file, the two let of email are not execution in anyway.
if you want that behavior you need to replace the email option in your subject by a variable, and your second it you need to wrap it in a context and put inside you let(:email), this is the way that rspec is going to replace the value of your subject in each it.
Here an example but using a password variable, also your two first test are passing, because your are missing the password that way your expec is false, but they are not test the test your are describing.
describe 'password field' do
subject { Usuario.new(nombre: 'jan', username: 'kowalski', password: password).valid? }
context 'when password has wrong format' do
let(:password) { nil }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when password size is incorrect' do
let(:password) { 'jan' }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when password has correct format' do
let(:password) { '1qaz2wsx' }
it 'accepts valid format' do
is_expected.to eq true
end
end
end
Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
– wichru
Nov 22 '18 at 21:18
add a comment |
you have some mistakes in your spec file, the two let of email are not execution in anyway.
if you want that behavior you need to replace the email option in your subject by a variable, and your second it you need to wrap it in a context and put inside you let(:email), this is the way that rspec is going to replace the value of your subject in each it.
Here an example but using a password variable, also your two first test are passing, because your are missing the password that way your expec is false, but they are not test the test your are describing.
describe 'password field' do
subject { Usuario.new(nombre: 'jan', username: 'kowalski', password: password).valid? }
context 'when password has wrong format' do
let(:password) { nil }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when password size is incorrect' do
let(:password) { 'jan' }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when password has correct format' do
let(:password) { '1qaz2wsx' }
it 'accepts valid format' do
is_expected.to eq true
end
end
end
you have some mistakes in your spec file, the two let of email are not execution in anyway.
if you want that behavior you need to replace the email option in your subject by a variable, and your second it you need to wrap it in a context and put inside you let(:email), this is the way that rspec is going to replace the value of your subject in each it.
Here an example but using a password variable, also your two first test are passing, because your are missing the password that way your expec is false, but they are not test the test your are describing.
describe 'password field' do
subject { Usuario.new(nombre: 'jan', username: 'kowalski', password: password).valid? }
context 'when password has wrong format' do
let(:password) { nil }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when password size is incorrect' do
let(:password) { 'jan' }
it 'complains for invalid format' do
is_expected.to eq false
end
end
context 'when password has correct format' do
let(:password) { '1qaz2wsx' }
it 'accepts valid format' do
is_expected.to eq true
end
end
end
answered Nov 22 '18 at 19:30
Luis SilvaLuis Silva
6113
6113
Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
– wichru
Nov 22 '18 at 21:18
add a comment |
Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
– wichru
Nov 22 '18 at 21:18
Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
– wichru
Nov 22 '18 at 21:18
Your example showed me that I forgot to add password which is required in devise model either. Of course the solution was also to replace the email option by a variable.
– wichru
Nov 22 '18 at 21:18
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53436282%2frspec-for-email-format-validation-failed%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown