angular-mocks - 只有模拟显式请求.通过所有意外的请求

par*_*ent 16 angular-mock

我发现角度模拟阻止所有请求BY DEFAULT,并迫使我"直接"发生我想要的东西,这令人非常沮丧.

有时我只想用模拟测试1个url,我必须为每个"意外请求"错误跳过严重的箍.

我不知道正则表达式,我不喜欢正则表达式,我不想使用正则表达式!

看一下我需要的一个简单的模拟这个可怕的代码

 $httpBackend.whenGET(/\/atlas\/account\/[0-9]+$/)
     .respond(atlasAccounts[0]);

  $httpBackend.whenGET(/\/scripts$/).passThrough();     
  $httpBackend.whenGET(/^\w+.*/).passThrough();     
  $httpBackend.whenPOST(/^\w+.*/).passThrough(); 
Run Code Online (Sandbox Code Playgroud)

为什么这不能简化为一行???

 $httpBackend.whenGET(/\/atlas\/account\/[0-9]+$/)
     .respond(atlasAccounts[0]); 
Run Code Online (Sandbox Code Playgroud)

或者甚至更好,为什么它不支持该死的通配符?他们是否试图让开发人员的生活变得更难?

  $httpBackend.whenGET("/atlas/account*") 
     .respond(atlasAccounts[0]);
Run Code Online (Sandbox Code Playgroud)

这就是我所需要的,只要它是直观的......

有没有办法在ngMock中禁用这个全有或全无的约定,并且只是拦截我明显嘲笑的网址?

Lyd*_*don 10

首先添加所有捕获,然后最后为所有人添加一个passthrough.我在我的应用程序中做了类似的事情并且工作得很好:

function run($httpBackend) {
    var phones = [{ name: 'phone1' }, { name: 'phone2' }];

    // Capture specific request
    $httpBackend.whenGET('/phones').respond(function () {
        return phones;
    });

    // Passthrough everything
    $httpBackend.whenGET(/[\s\S]*/).passThrough();
}
Run Code Online (Sandbox Code Playgroud)

这将捕获'/ phone'.如果它没有捕获,它将通过.