私の通常のテストケースは次のようになります
it("should send get request", inject(function(someServices) {
//some test
}));
そして、Jasmine 2.0の非同期テストは次のようになります。
it("should send get request", function(done) {
someAsync.then(function(){
done();
});
});
1つのテストでdoneとinjectの両方を使用するにはどうすればよいですか?
これは動作するはずです。 Jasmine 2.0にアップデートしたときに同じ問題に遭遇しました
it("should send get request", function(done) {
inject(function(someServices) {
//some async test
done();
})(); // function returned by 'inject' has to be invoked
});
重要な注意事項は、inject
呼び出しの後の括弧です。例えば。
inject(function(someServices) {
//some async test
done();
})(); <-- these brackets here important.
inject
のタイプを見ると:
export declare function inject(tokens: any[], fn: Function): () => any;
あなたはそれが関数を返すのを見ることができるので、関数を呼び出すのを忘れたので、出力を得ていませんでした!!
考えてみると、it
は関数をとるので、関数を返すのは理にかなっています!
したがって、余分な括弧はすべての問題を解決するはずです!
作業例:
it('should allow you to observe for changes', function(done) {
inject([GlobalStateService], (globalStateService: GlobalStateService) => {
globalStateService.observe("user", storageType.InMemoryStorage, (user: string) => {
expect(user).toBe("bla");
done();
});
globalStateService.write({ user: "bla"}, storageType.InMemoryStorage);
})();
});
@Scott Boringの答えと、inject内のコードは決して呼び出されないと言及した@WhiteAngelのコメントに追加します。
これは私のために働いた:
it("should send get request", function(done) {
inject(function(someServices) {
//some async test
done();
})();
});
あなたはそのようなテストを書くことができます:
describe("Some service'", function () {
var service;
var data;
beforeEach(function (done) {
module('app');
inject(function (someService) {
service = someService;
});
service
.getData()
.then(function(result) {
data = result;
done();
});
});
it('should return a result', function () {
expect(data).toBeDefined();
});
}
For Angular 5.2.0:@ scott-boringのアプローチは私にとってはうまくいきませんでした。仕事はTestBed.get()
の代わりにinject()
を使用してサービスを取得することです、 docs で説明されているとおり:
describe('TooltipComponent', () => {
let component: TooltipComponent;
let fixture: ComponentFixture<TooltipComponent>;
let myService: MyService;
beforeEach(async(() => {
const myServiceSpy = jasmine.createSpyObj('MyService', ['calc']);
TestBed.configureTestingModule({
declarations: [ MyComponent ],
providers: [
{provide: MyService, useValue: myServiceSpy}
]
})
.compileComponents();
myService = TestBed.get(MyService);
}));
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should render correctly', (done) => {
component.render();
setTimeout(() => {
expect(myService.calc).toHaveBeenCalled();
done();
}, 1000);
});