【发布时间】:2015-05-09 08:44:19
【问题描述】:
我正在开发一个大型 Angular 应用程序,它需要在浏览器中模拟整个 API(也称为 无后端开发)。我的应用程序中有很多不同的部分和视图,每个部分都有自己的模拟定义。
我知道我可以使用ngMock 模块的$httpBackend 服务来模拟AJAX 调用。这就是我想要的。我找到了working snippet at jsfiddle。
但我缺少的是如何将其拆分为多个文件?正如我所说,我的应用程序将有数百个页面,甚至可能有更多的 RESTful 资源,我不能简单地将其放入一个源文件中。这作为架构问题:将数千个 whenGET 和 whenPOST 调用分成不同文件以简单地模拟相同 API 的最佳方法是什么(即有效、可扩展且易于维护)? 如何在项目文件结构方面分离 mocks?应用程序中的每个模块是否应该有一个单独的.run() 方法?我可以从 JSON 文件加载模拟吗?
我将不胜感激解释和演示
为了让回答更容易,下面是小提琴的相关部分:
myApp.run(function ($httpBackend) {
var phones = [{name: 'phone1'}, {name: 'phone2'}];
$httpBackend.whenPOST('/phones').respond(function (method, url, data, headers) {
console.log('Received these data:', method, url, data, headers);
phones.push(angular.fromJson(data));
return [200, {}, {}];
});
$httpBackend.whenGET('/phones').respond(function (method, url, data) {
console.log("Getting phones");
return [200, phones, {}];
});
$httpBackend.whenGET(/\.html$/).passThrough();
});
【问题讨论】:
-
你最后采用了什么方法?我目前处于同样的情况,想知道最好的方法。 @杜辛
-
@Jagrut 或多或少地回答您的问题,我所做的是使用 browserify 进行捆绑。您的源代码中存在数百个调用问题 - 因此您希望将源代码拆分为多个文件。但是您可以使用 concat/browserify/webpack/(它们的组合)来生成单个目标文件(将从
index.html使用)。因此,您可以从源代码中的清晰和可扩展层次结构中受益AND 在构建中拥有一个大的mock.js输出文件(dist、输出,无论您如何称呼它)。您还可以包含/排除mock.js以打开/关闭模拟!希望有帮助:) -
实际上,我的团队负责人希望我有一个单独的文件,其中包含所有 $httpBackend 调用,并且我在所有单元测试中都包含该文件。那可能吗?抱歉回复晚了。
-
@Jagrut 当然是。您将在 SOURCE 中为单独的请求/响应保留单独的文件。但为了测试它或基于模拟运行应用程序,请使用 browserify、grunt、gulp 或其他任何东西来生成一个文件。我也做同样的事情。所以你们俩都会满意的:)
-
我所做的是创建了一个包含所有 $httpBackend 调用的 JSON 文件,然后使用 karma-json-fixtures-preprocessor 能够将该文件包含在我的所有测试用例中。比起执行部分,我们更关心的是代码的维护和重写。我不确定这是否是一个好习惯。你怎么看?
标签: javascript angularjs file mocking ngmock