我有这个简单的代码
npm run build
和这个规范(尽管我还在工作时尽可能减少)
require 'json'
module Html
class JsonHelper
attr_accessor :path
def initialize(path)
@path = path
end
def add(data)
old = JSON.parse(File.read(path))
merged = old.merge(data)
File.write(path, merged.to_json)
end
end
end
require 'html/helpers/json_helper'
describe Html::JsonHelper do
let(:path) { "/test/data.json" }
subject { described_class.new(path) }
describe "#add(data)" do
before(:each) do
allow(File).to receive(:write).with(path, anything) do |path, data|
@saved_string = data
@saved_json = JSON.parse(data)
end
subject.add(new_data)
end
let(:new_data) { { oldestIndex: 100 } }
let(:old_data) { {"test" => 'testing', "old" => 50} }
def stub_old_json
allow(File).to receive(:read).with(path).and_return(@data_before.to_json)
end
context "when given data is not present" do
before(:each) do
puts "HERE"
binding.pry
@data_before = old_data
stub_old_json
end
it "adds data" do
expect(@saved_json).to include("oldestIndex" => 100)
end
it "doesn't change old data" do
expect(@saved_json).to include(old_data)
end
end
end
end
永远不会被打印并且binding.pry没有停止执行,测试失败并显示消息HERE
这意味着之前(:每个)永远不会被执行。
为什么?
如何解决?
答案 0 :(得分:1)
它不会打印所需的消息,因为它在第一个before
块处失败。 Rspec doc about execution order
它失败了,因为你提供了一个绝对路径,所以它正在检查/test/data.json
使用测试的相对路径即。 ../data.json
(只是猜测),
或完整路径。
如果是铁轨:
Rails.root.join('path_to_folder_with_data_json', 'data.json')