不要在没有使用before all块的情况下为每个测试执行before test代码

时间:2019-01-23 08:41:07

标签: ruby rspec automated-tests

我想执行一些代码,然后用多个it语句测试结果,而不必运行代码。

fun = @(x,y) x.^2 + y.^2;

xmin = 0; xmax = 5;
ymin = -5; ymax = 0;

q = integral2(fun,xmin,xmax,ymin,ymax); % q = 4.166666666667348e+02

如果您查看执行,它看起来像:

  

在A.1之前-T1-在A.1之前-T2-在A.1之前-T3-在B.1之前-T1-...

但是我想要:

  

在A.1之前-T1-T2-T3-在B.1之前-T1-T2-T3

我尝试使用before(:all),但是我不能使用它,因为我使用了很多let变量。您会收到以下错误,因为在每个上下文中let都会发生变化。

  

RuntimeError:让声明context 'context A' do context 'context A.1' do before(:each) do # Doing a lot of things and using let variables,... end it 'T1: test thing 1' it 'T2: test thing 2' it 'T3: test thing 3' end context 'context B.1' do before(:each) do # Doing a lot of things and using let variables,... end it 'T1: test thing 1' it 'T2: test thing 2' it 'T3: test thing 3' end end var1钩子中访问:

我可以将所有测试合并到一个it语句中,但我不希望这样,我想查看哪个particalur测试失败。我看到的唯一解决方案是摆脱所有的let变量,但这将导致大量的实例变量块和大量不同的测试文件,从而导致大量重复代码...

我可以用其他方式得到我想要的行为吗?还是我必须换一种方式看待事物?

1 个答案:

答案 0 :(得分:1)

  

但是我不想要那个,我想看看哪个particalur测试失败了。

那是阻止您执行此操作的唯一方法?容易。

   context 'context A.1' do
     before(:each) do
        # Doing a lot of things and using let variables,...
     end

     it 'test all the things', aggregate_failures: true do
       ... 
     end

  end

您甚至可以为spec_helper.rb中的所有规范全局启用它(这就是我要做的)。