我一直在敲我的头这几天,只是不能取得任何进展。我正在尝试用摩卡来测试我的角2个应用程序(SystemJS为基础,如果它事项),我只是可以” W图如何获得控制器的实例。
我想我可以拿出最简单的情况;
import {bootstrap} from 'angular2/platform/browser';
import {App} from '../app/app';
import {Type} from 'angular2/core';
describe('Login', () => {
let app:App;
beforeEach((done) => {
console.log(bootstrap);
bootstrap(<Type>App)
.then(result => result.instance)
.then(instance => {
app = instance;
done();
});
});
it('Test for App to Exist', (done) => {
console.log(app);
done();
});
});
尽我所能知道的,不知何故console.log(bootstrap)
失败,因为我一饮而尽,摩卡任务刚刚去世(默默)。注释掉引导引用只是做一个虚拟测试;
import {bootstrap} from 'angular2/platform/browser';
import {App} from '../app/app';
import {Type} from 'angular2/core';
describe('Login', () => {
let app:App;
beforeEach((done) => {
done();
});
it('Test for App to Exist', (done) => {
console.log(app);
done();
});
});
日志,因为我期望的undefined
。有没有人成功地得到这样的工作吗?这里的目标是单元测试控制器,所以我真的已经很努力避免phantomJS / webdriver的/等。
我认为,摩卡可以,因为它在节点运行只(也许这将有可能Angular2普及,当你只是渲染HTML字符串服务器端)不能直接使用。话虽这么说,你可以使用mochify这是摩卡与在后台使用browserify。我正在为安装一个example project。
然后测试可以是这个样子:
// import everything needed for to run Angular (we're running in PhantomJS by defualt but other browsers are possible too)
import "es6-shim";
import "es6-promise";
import "zone.js";
import "rxjs";
import "reflect-metadata";
import "../../typings/browser.d.ts";
import {Injector, enableProdMode} from "angular2/core";
import {HTTP_PROVIDERS} from "angular2/http";
// import stuff we need to instantiate component
import GithubComponent from "./gihub-component";
import GithubService from "./github-service";
import Config from "../config";
import * as sinon from "sinon";
enableProdMode();
describe("github-component", () => {
let injector: Injector;
let component: any;
let service: any;
beforeEach(() => {
// instantiate Angular 2 DI context
injector = Injector.resolveAndCreate([
HTTP_PROVIDERS,
GithubComponent,
GithubService,
Config
]);
component = injector.get(GithubComponent);
service = injector.get(GithubService);
sinon.spy(service, "getRepos");
});
afterEach(() => {
service.getRepos.restore();
});
it("searches for repository", () => {
component.query.updateValue("test");
return setTimeout(() => {
sinon.assert.calledOnce(service.getRepos);
sinon.assert.calledWith(service.getRepos, "test");
}, 300);
});
});