RSpec为什么之前(:每个)从未执行过?

时间:2017-03-25 11:39:53

标签: ruby rspec

我有这个简单的代码

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

这意味着之前(:每个)永远不会被执行。

为什么?
如何解决?

1 个答案:

答案 0 :(得分:1)

它不会打印所需的消息,因为它在第一个before块处失败。 Rspec doc about execution order

它失败了,因为你提供了一个绝对路径,所以它正在检查/test/data.json

使用测试的相对路径即。 ../data.json(只是猜测), 或完整路径。 如果是铁轨: Rails.root.join('path_to_folder_with_data_json', 'data.json')