我一直在尝试用Jasmine测试一个角度应用程序,它们的效果非常好。我也正在开发一个基于John Papa的Hottowel的Angular应用程序。
但是,唉,测试是不可能的,因为BreezeJs似乎根本不可测试。它一直干扰我的测试,无法找到模拟,存根或间谍的方法。
关于这个问题有一些古老的问题,但唯一的答案似乎是来自其他辉煌的沃尔贝尔的承诺。
显然可以在内部使用QUnit进行测试,但是测试很简单,没有跟踪如何使用其他框架,更不用说市场领导者Angular。
所以,我的问题是: 有没有人知道用Jasmine和Angular测试Breezejs的方法,或者我是否应该完全忘记这个想法并使用旧的$ http ...?
感谢明显受挫的米格尔·德尔加多
答案 0 :(得分:1)
好的,感谢Bell Ward和PW Kad的帮助。
作为说明我如何“解决”问题的一种方式:
问题是该应用程序基于John Papa的Hottowel,它有一个名为Prime的方法,可以预加载查找。
因此,只要应用程序运行,Breeze就会请求元数据,查找和大量工作在启动时完成。通常Breeze会抛出空元数据的异常。
我对TDD并不擅长,但我的理解是,被测试的作品必须与其他“活动部件”隔离开来,因此,Breeze完成的所有工作都应该被抽象或嘲笑。
直到今天,我还不知道如何模仿Breeze,我试过但是模拟器正在为Prime和默认控制器所期望的数据留下空洞。
所以,我这样做了:
Boilerplate prep work... then:
beforeEach(inject(function($injector, breeze) {
// Set up the mock http service responses
$httpBackend = $injector.get('$httpBackend');
// backend definition common for all tests
$httpBackend.when('GET', '/auth').respond(200, [{ id: 1, name: "banana" }]);
$httpBackend.whenGET('breeze/Breeze/Metadata').respond(200,
{THE WHOLE METADATA FILE GOES HERE!}
//This are calls for each lookup
$httpBackend.whenGET('breeze/Breeze/Lookup1?').respond(200, [{}]); //dummy answer,ok
$httpBackend.whenGET('breeze/Breeze/Lookup2?').respond(200, [{}]);
$rootScope = $injector.get('$rootScope');
var $controller = $injector.get('$controller');
//The controller doesn't have anything to do with breeze...
createController = function () {
return $controller(authentication, { '$scope': $rootScope });
};
//...boilerplate Jasmine...
我必须插入整个元数据文件,因为它不知道在运行时需要什么。
答案 1 :(得分:0)
Breeze应用程序很容易测试,但我当然同意我们缺乏足够的指导。
在短期内,您将找到一个带有Jasmine测试{4}的Breeze / Angular应用程序。
我正在研究测试Angular应用程序的PluralSight课程,并希望能够轻松实现。我很乐意尽快提出您的具体问题,以便我可以将它们合并(至少在我的计划中)。
答案 2 :(得分:0)
您可以使用仅作为测试的一部分加载的假实体轻松模拟breeze.js应用程序。这是我写的关于确切主题的文章 - http://pwkad.wordpress.com/2014/02/02/creating-mocks-with-breeze-js/ - 它向您展示了如何开始。