Есть простой тест:консоли говорит переменная не ноль, в тестах это ноль
context "in the same board" do
@link = FactoryGirl.create(:link_with_board, url: "www.onet.pl")
@board = @link.board
it "is invalid when the same url already exists" do
expect(@board.links.build(url: "www.onet.pl")).to_not be_valid
expect(@board.links.build(url: "http://www.onet.pl")).to_not be_valid
expect(@board.links.build(url: "www.onet.pl/")).to_not be_valid
end
end
Он показывает мне ошибку:
Failures:
1) Link in the same board is invalid when the same url already exists
Failure/Error: expect(@board.links.build(url: "www.onet.pl")).to_not be_valid
NoMethodError:
undefined method `links' for nil:NilClass
# ./spec/models/link_spec.rb:50:in `block (3 levels) in <top (required)>'
Когда я пытаюсь то же самое в консоли, все работает отлично. Любая идея почему?
Update:
Хорошо, я сделал его работу, но до сих пор вопрос остается тем же, почему первый не работает?
context "in the same board" do
#FIX START
before :each do
@link = FactoryGirl.create(:link_with_board, url: "www.onet.pl")
@board = @link.board
end
#FIX END
it "is invalid when the same url already exists" do
expect(@board.links.build(url: "www.onet.pl")).to_not be_valid
expect(@board.links.build(url: "http://www.onet.pl")).to_not be_valid
expect(@board.links.build(url: "www.onet.pl/")).to_not be_valid
end
end
Используйте 'let' вместо переменного экземпляра. – Hauleth